如何从C++函数返回多个错误代码

bob*_*bob 3 c++

从C++函数返回成功或一个或多个错误代码的好方法是什么?

我有这个名为save()的成员函数,它保存到每个成员变量中,至少有十个这些成员变量被保存到,对于调用save(),我想找出是否调用失败,如果是这样,关于哪个成员变量(一些是硬故障,一些是软的).

Jor*_*mer 7

您可以返回具有多个错误字段的对象,也可以使用"out"参数.

你如何做到这一点取决于你的设计以及你想要返回的确切内容.常见的情况是,您需要报告状态代码以及各种消息.有时会在函数返回状态代码作为返回值的情况下执行此操作,然后通过"out"参数返回消息状态.

如果您只是返回一组"代码",那么构造结构类型并返回它可能更有意义.在这种情况下,我倾向于将其作为out参数传递,并让方法在内部更新它,而不是每次都分配一个新的.

你打算一次或多次这样做吗?


Die*_*Epp 7

我知道这并没有真正回答你的问题,但......

在C++中,您应该使用异常而不是返回错误代码.错误代码最常用于库,它们不希望强制库用户使用特定的错误处理约定,但在C++中,我们已经有了stdexcept.当然,可能有理由不使用异常,例如,如果您正在编写嵌入式代码或内核扩展.

  • 虽然我没有反对异常,但有时最好使用错误代码.我认为你说"应该使用"的例外情况有点太过分了. (4认同)

Mar*_*ote 6

我通常使用boost::tuple:

typedef boost::tuple<int,int> return_value;

return_value r = my_function();

int first_value = boost::get<0>( r );
int second_valud = boost::get<1>( r );
Run Code Online (Sandbox Code Playgroud)

编辑

您还可以使用boost::tie从元组中提取值:

boost::tie( first_value, second_value ) = r;
Run Code Online (Sandbox Code Playgroud)