在日常工作中,我通常会这样编写代码:
int ret = 0;
ret = func1();
if(ret != 0) {
return ret;
}
ret = func2();
if(ret != 0) {
return ret;
}
但这意味着我需要完成很多“ if(ret!= 0){return ret;}”,是否有更多的C ++优雅实现可以完成功能跳转?顺便说一句,我们不允许使用异常。
另一种可能性是对for range
一组功能执行循环:
for (auto& ff: {func1, func2, func3}) {
输出:
in func1
in func2
in func3
3
码:
#include <iostream>
int func1() {
std::cout << "in func1\n";
return 0;
}
int func2() {
std::cout << "in func2\n";
return 0;
}
int func3() {
std::cout << "in func3\n";
return 3;
}
int foo () {
for (auto& ff: {func1, func2, func3}) {
int ret;
if ((ret=ff()) != 0) {
return ret;
}
}
return 0;
}
int main() {
std::cout << foo() << "\n";
}
在评论中,您询问了如何使其与成员函数一起使用的问题。似乎比较棘手,特别是因为编译器很难猜测initializer_list的正确类型。这是解决它的一种方法。
#include <iostream>
class Obj {
public:
int func1() {
std::cout << "in func1\n";
return 0;
}
int func2() {
std::cout << "in func2\n";
return 0;
}
int func3() {
std::cout << "in func3\n";
return 3;
}
int foo () {
for (auto ff: {&func1, &func2, &func3}) {
int ret;
if ((ret=(this->*ff)()) != 0) {
return ret;
}
}
return 0;
}
};
int main() {
Obj var;
std::cout << var.foo() << "\n";
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句