是否有其他C ++优雅的实现来完成功能跳转?

科门章

在日常工作中,我通常会这样编写代码:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Windows平台是否有其他CIFS实现?

在Java中实现克隆是否有其他选择?

是否还有其他mongodb聚合表达式来实现此结果?

是否有gradlew自动完成功能?

InDesign是否具有MIF或具有其他等效功能的其他易于生成的格式的类似物?

NSOperationQueue中的所有其他操作完成时,无论它们是否成功完成,都将执行NSOperation

是否可以通过实现将href属性添加到自动完成功能?

如何通过选择带有位置自动完成功能的标记来绘制路线?

具有自动完成功能的jQuery ajax:使用ajax实现它的错误

如何在没有UITableview的情况下在UISearchbar中实现自动完成功能?

具有自动完成功能的下拉菜单与具有自动完成功能的其他下拉菜单或重复字段中的单选按钮重叠

是否有其他 api 方法来获取有效的 Docusign OAuth 令牌?

是否有ASP.NET Identitity的实现具有高于帐户的其他级别?

在golang中是否有一些优雅的方法可以暂停和恢复其他goroutine?

SQLite 是否具有其他 SQL 风格没有的任何功能(除了文件化)?

有W3C有效的方法来禁用HTML表单中的自动完成功能吗?

使用 Grid Tkinter GUI 以及是否有任何其他正确的做法来实现这一点

Razer Synapse是否具有其他功能,可以为鼠标提供完整的宏功能?

iracket中是否有第一功能和其他功能?

与其他系统编程语言(例如C)中通常使用的功能相比,Rust风格的方法调用方法是否有开销?

bash完成是否有可能在其他选择中循环?

在完成任务对象很长时间之后是否还有其他缺点?

如何使用其他日期字段导入实际完成时间...是否有“规则”?

活動(稱為完成)是否有可能開始其他活動?

寻找其他可能的方式来检查变量是否有意义

是否有其他步骤来启用使用社交帐户注册

SQLAlchemy ORM通过检查列表中是否有其他表值来更新值

是否有AWS服务来可视化其他AWS服务之间的触发器

是否有更简单的方法来解决其他多个问题?