首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于判断函数返回值技艺

2013-01-07 
关于判断函数返回值技巧相信大家也遇到过,比如做一件事需要A,B,C,D,E。。或许更多个步骤则有如下功能函数boo

关于判断函数返回值技巧
相信大家也遇到过,比如做一件事需要A,B,C,D,E。。或许更多个步骤
则有如下功能函数
bool doA();
bool doB();
bool doC();
bool doD();
bool doE();

目前我对函数判断返回值实现如下
if(!doA())
{
  setErrorMsg(“A failed!”);
  return false
}
其他的类同。。
。。。
。。
写完整体感觉重复代码太多,不知道如何重构,请高手指点一下。。。


[解决办法]
用函数指针数组统一管理这些很相似的函数。
[解决办法]
如果执行顺序为A-B-C-D-E
if(A && B && C && D && E)
{
}
else
{
}

如果按照LZ说的用2禁止来
BYTE nbyte;
这样你要计算你每个行为对应nbyte哪个位
假如行为A对应nbyte的最后一位,
假如行为B对应nbyte的最后第二位,
C --- 倒数3
D --- 倒数4
E --- 倒数5

保存每次的行为执行成功情况:
nbyte= nbyte
[解决办法]
A;
nbyte = nbyte
[解决办法]
(B<<1);
nbyte = nbyte
[解决办法]
(C<<2);
nbyte = nbyte
[解决办法]
(D<<3);
nbyte = nbyte
[解决办法]
(E<<4);

取每个行为的执行情况:
A = (nbyte<<7)>>7;
B = (nbyte<<6)>>7;
C = (nbyte<<5)>>7;
D = (nbyte<<4)>>7;
E = (nbyte<<3)>>7;
[解决办法]
直接用宏不是很好.
CHECK_RESULT( doXXX(), "error message" )
[解决办法]
bool doA();
bool doB();
bool doC();
bool doD();
bool doE();
如果這些函數參數類型都一樣,可考慮用函數指針
typedef bool (*dofunc_t)(void);
然後建一個表
struct do {
dofunc_t do;
const char* message;
} all_do[] = {
{doA, "A fail\n"},
{doB, "B fail\n"},
{doC, "C fail\n"},
{doD, "D fail\n"},
{doE, "E fail\n"},
//以後更多都可以加進來
};

for (int i=0; i<sizeof(all_do)/sizeof(all_do[0]; i++) 
if (!all_do[i].do()) printf(all_do[i].message);

OK.

[解决办法]
使用函数指针,使用数组管理,然后循环就ok了

热点排行