关于判断函数返回值技巧
相信大家也遇到过,比如做一件事需要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了