首页 > 解决方案 > 有没有更好的方法来使这个软件流动

问题描述

我有几个函数可以尝试评估一些数据。如果每个函数可以成功评估数据,则返回 1,否则返回 0。这些函数一个接一个地被调用,但如果一个返回值 1,则执行应该停止。

示例函数如下所示:

int function1(std::string &data)
{
    // do something
    if (success)
    {
        return 1;
    }
    return 0;
}

int function2(std::string &data)
{
    // do something
    if (success)
    {
        return 1;
    }
    return 0;
}
... more functions ...

组织这个流程的最清晰的方法是什么?我知道我可以这样使用 if 语句:

void doSomething(void)
{
    if (function1(data))
    {
        return;
    }
    if (function2(data))
    {
        return;
    }
    ... more if's ...
}

但这似乎冗长,并且有大量需要输入的 if。我想到的另一个选择是从函数的 return 0 调用下一个函数,如下所示

int function1(std::string &data)
{
    // do something
    if (success)
    {
        return 1;
    }
    return function2(data);
}

int function2(std::string &data)
{
    // do something
    if (success)
    {
        return 1;
    }
    return function3(data);
}
... more functions ...

使调用更清晰,因为您只需要调用 function1() 即可根据需要进行评估,但似乎使代码更难维护。如果需要在流程中间插入另一张支票,或者调用顺序发生变化,则需要更改新函数之后的所有函数以解决此问题。

我是否错过了一些实现这种程序流程的智能清晰的 C++ 方法,或者是这些方法中最好的一种。我目前倾向于 if 方法,但我觉得我错过了一些东西。

标签: if-statementc++14

解决方案


void doSomething() {
    function1(data) || function2(data) /* || ... more function calls ... */;
}

逻辑或||运算符恰好具有您需要的属性 - 从左到右评估并在一个操作数为 时立即停止true


推荐阅读