我有一个功能依赖于其他两个功能的成功返回状态。即如果任一函数失败,第三个函数需要更新其中的内容以反映这一点,但仍然继续。是否有一种干净的方式来执行第三个功能,而不是多余的?
在我的情况下,我有以下内容,其中func1
和func2
返回成功或失败:
bool status;
bool status2;
status = func1();
status2 = func2();
if (status && status2){
func3(other_args,true)
else func3(other_args, false);
我觉得这样做并不好。我的func3
进行了大量信息的写入,并依赖于知道所执行的操作是否失败。有没有更简洁的方法来实现第三个函数调用?
我的第一个想法是:
if (func1 && func2){
func3(some_other_args, true)
else func3(some_other_args, false)
这是正确的心态,还是有更清洁的东西?
答案 0 :(得分:5)
只需将条件作为参数传递即可避免分支。
status = func1();
status2 = func2();
func3(other_args, (status && status2))
答案 1 :(得分:2)
既然你真的想要两个结果,那么如果执行的顺序对你来说并不重要,那么最短的就是不要短路:
func3(other_args, func1() & func2());
但这很容易受到错误修复(" verschlimmbessern"德语)的影响,几周之后返回代码并且#34;正确"结合。
更强大的解决方案
auto status = func1();
auto status2 = func2();
func3(other_args, status && status2);
答案 2 :(得分:0)
也许其他C ++方式:将func1()
和func2()
自己传递给func3()
,它还会处理函数返回状态,如下所示:
void func3(other_args i, decltype(func1) f1, decltype(func2) f2){
if (f1() && f2()) {
//do true
}
else {
//do false
}
}
这种方式func3()
调用变得更加清晰:
func3(other_args, func1, func2);
答案 3 :(得分:-2)
在你的情况下你可以写:
auto status = func1();
auto status2 = func2();
func3(other_args, status && status2);
或许我不太明白你的问题