如何从其他两个函数的成功返回状态中干净地执行函数?

时间:2018-05-14 14:57:01

标签: c++ c++11

我有一个功能依赖于其他两个功能的成功返回状态。即如果任一函数失败,第三个函数需要更新其中的内容以反映这一点,但仍然继续。是否有一种干净的方式来执行第三个功能,而不是多余的?

在我的情况下,我有以下内容,其中func1func2返回成功或失败:

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)

这是正确的心态,还是有更清洁的东西?

4 个答案:

答案 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);

或许我不太明白你的问题