c++ - 什么是在 C++ 中返回错误代码的正确方法

标签 c++

我正在使用错误代码来处理我的 c++ 项目中的错误。问题是如何从一个应该返回一些变量/对象的函数返回错误代码。

考虑一下:

long val = myobject.doSomething();

这里,myobject 是某个类的对象。如果 doSomething 函数遇到一些错误情况,它应该如何通知调用者(不使用异常)。

可能的解决方案:

  1. 在类中有一个可以被调用者检查的数据成员(比如 err_)。但在共享同一个对象并调用同一个函数的多线程应用程序中,这将是不安全的。
  2. 使用一些全局错误变量,在多线程环境中也是同样的问题。

现在我如何通知调用者一些错误情况?

最佳答案

制作一个名为 Maybe 的模板它由您的返回值类型参数化。每当您返回一个值时,将其包装在此模板中,如下所示:

Maybe<long> result = object.somemethod();

Maybe模板可以通过错误代码(可能是静态方法)进行实例化:

return Maybe<long>::error(code);

但通常只返回值:

Maybe<long> retval;
retval = 15;
return retval;

(当然,您必须重写适当的构造函数、赋值运算符等)

在客户端调用一个方法来检查错误。

Maybe<long> result = object.somemethod();
if (result.is_error) 
{ 
    ... handle the error ...
}
else
{
    ... use the result ...
}

再次,您需要定义适当的运算符才能使用 Maybe<long>哪里有long必填。

这听起来像是很多工作,但实际上,制作一个好的、防弹的 Maybe模板。您还必须对其进行一些性能调整以避免令人讨厌的开销。如果您想让它更灵活,您可以在返回值类型和错误类型上对其进行参数化。 (这只是稍微增加了复杂性。)

关于c++ - 什么是在 C++ 中返回错误代码的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3157098/

相关文章:

c++ - 为什么不禁止这个用户定义的转换序列?

c++ - 为什么此代码会以某些角度返回框错误一侧的交点?

c++ - 为什么这个程序提示我 'pressy any key to continue' ?

c++ - 避免警告 'Unreferenced Formal Parameter'

c++ - 将 std::vector 作为 const float * 传递?

c++ - 如何更改 QtCreator 中的 C++ 运行时库设置?

c++ - 使用 ffmpeg 和分离的 AVCodecContext 解码 h264 rtsp

c++ - Unsigned Long Long 超出范围?

c++ - OpenGL 淡入淡出问题

c++ - 多次使用 strtok_s