條件判斷變成函數時,如何命名好?

Saden2006 2008-10-30 02:01:40
void __fastcall Main_Pro( void )
{
String A;
A = Input_Data_From_Console();
if ( A == 0x00 )
{
Do_A0();
}
else if( A== 0x01 )
{
Do_A1();
}
}

上邊的代碼很不爽。想把條件判斷做成函數。
void __fastcall Main_Pro( void )
{
String A;
A = Input_Data_From_Console();
DO_A0_On_00(A);
Do_A1_On_01(A);
}

不過,看起來還是不爽。因爲這兩段代碼只會執行一段,這樣寫好象執行了兩段代碼一樣。

哪位有比較好的想法?

...全文
109 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtting_8984313 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 Saden2006 的回复:]
上面的回答不見得很高明。

例子裏輸入參數是00,01,正好與數組下標暗合,但如果是字符串呢。--〉所以,問題的實質是:
何種方式比較好地表達條件判斷的語義與邏輯。所謂的邏輯,指的是,多選一只能出現一個函數(在主函數中) ;語義上指的是一個合適的名稱,以表達函數功能。

告訴你們,100分是不好賺的。我總共才130分,這幾乎是我的全部家當了!--開個玩笑。

[/Quote]


到底是解决问题还是在。。。。。。
如果爽你搞个hook,所有函数都写成dll,然后随便你什么搞dll了,还能在线升级,只要你愿意。你想用COM解决也没有关系。
我想一般人的思路还是越简单越好。
liuweibit 2008-10-30
  • 打赏
  • 举报
回复
来学习了,谢谢LZ!
lann64 2008-10-30
  • 打赏
  • 举报
回复
用函数指针就可以了
#include<iostream>
#include <map>

using namespace std;

typedef void (*foo) (void);
void test1() { cout<<"1"<<endl;}
void test2() { cout<<"2"<<endl;}
int main()
{
map<string,foo> m;
string s1("abc"),s2("xyz");
m[s1]=test1;
m[s2]=test2;

(*m[s1])();

return 0;
}

要是其他类型,修改map就可以了。
redleaves 2008-10-30
  • 打赏
  • 举报
回复
楼主还要再进修呀...
没人规定跳转表非要是数组..你用其它的东西也可以.比如说MAP...这下别说数字了,就连字符串甚至其它结构也可以做跳转标志了..
还不够?还要模糊匹配? 没关系,自己提供比较函数,用MAP也基本可以搞定.... 或者用加权函数算一个权志再用MAP做映射?
方法很多,只有想不到,没有做不到...
Saden2006 2008-10-30
  • 打赏
  • 举报
回复
上面的回答不見得很高明。

例子裏輸入參數是00,01,正好與數組下標暗合,但如果是字符串呢。--〉所以,問題的實質是:
何種方式比較好地表達條件判斷的語義與邏輯。所謂的邏輯,指的是,多選一只能出現一個函數(在主函數中) ;語義上指的是一個合適的名稱,以表達函數功能。

告訴你們,100分是不好賺的。我總共才130分,這幾乎是我的全部家當了!--開個玩笑。
jack_luck 2008-10-30
  • 打赏
  • 举报
回复

我会这样,
void __fastcall Main_Pro( void )
{
char A;
A = Input_Data_From_Console();
Do_An(A);
}
}



void Do_An(char n)
{
switch(n)
{
case 0:Do_A0(); break;
case 1:Do_A1(); break;
default:
}
}

xtting_8984313 2008-10-30
  • 打赏
  • 举报
回复
再有,如果不是太复杂,搞个switch,感觉也可以可。写到一个函数里。
xtting_8984313 2008-10-30
  • 打赏
  • 举报
回复
functor好bt的说,这种简单的操作,还是查找吧。
xtting_8984313 2008-10-30
  • 打赏
  • 举报
回复
搞一个函数指针的数组
typedef void (*Func)()
Fuct fuc[100];
fuc[0]=funName1;
fuc[2]=funName2;

然后:
fun[A]();
redleaves 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]
“查表法”听说过没有?
[/Quote]
跳转表是处理你这种问题的好办法.如果你不喜欢函数指针,可以用functor来搞也行...
BT一点,你用模板来做递归查询也可以.呵呵
Kenny_Glacier 2008-10-30
  • 打赏
  • 举报
回复
为啥要吧C、C++写的这么别扭
killbug2004 2008-10-30
  • 打赏
  • 举报
回复
把DO_A0_On_00(A); Do_A1_On_01(A);弄成一个函数,在函数里面判断,如何
killbug2004 2008-10-30
  • 打赏
  • 举报
回复
把DO_A0_On_00(A); Do_A1_On_01(A);弄成一个函数,在函数里面判断,如何
The_eagles 2008-10-30
  • 打赏
  • 举报
回复
采用函数对象试试。
taodm 2008-10-30
  • 打赏
  • 举报
回复
“查表法”听说过没有?

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧