您的位置:首页 > 其它

FALSE_IT

2015-06-30 15:27 337 查看
本文讲一个有用的语法糖(suger),非常不错,解决了我实际工作中的问题。

假设你写了这样一个类:

class Executor {
int step1();
void step2();
int step3();
}

#define FAIL -1

int main() {
// 使用Executor,调用顺序必须是1、2、3
Executor exec;
if (FAIL == exec.step1()) {
log('error');
} else {
exec.step2();   // 不能通过if调用,因为返回值是void
if (FAIL == exec.step3()) {
log('error');
}
}
}


就因为一个void返回,让代码一下子别扭了,丑不丑?

如果能这样写该多好:

Executor exec;
if (FAIL == exec.step1()) {
log('error');
} else if (FAIL == exec.step2()) {
log('error');
} else if (FAIL == exec.step3()) {
log('error');
}


其实办法是有的,只需要写这样一个宏:

\#define FALSE_IT(stmt) ({ (stmt); false; })


Executor exec;
if (SUCCESS == exec.step1()) {
log('error');
} else if (FALSE_IT(exec.step2()) {   // 应用FALSE_IT宏
log('error');  // won't be here
} else if (FAIL == exec.step3()) {
log('error');
}


漂亮不!本方法来自阿里巴巴 OceanBase团队 @符风 同学。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: