我正在使用错误代码来处理我的 c++ 项目中的错误。问题是如何从一个应该返回一些变量/对象的函数返回错误代码。
考虑一下:
long val = myobject.doSomething();
这里,myobject 是某个类的对象。如果 doSomething 函数遇到一些错误情况,它应该如何通知调用者(不使用异常)。
可能的解决方案:
- 在类中有一个可以被调用者检查的数据成员(比如 err_)。但在共享同一个对象并调用同一个函数的多线程应用程序中,这将是不安全的。
- 使用一些全局错误变量,在多线程环境中也是同样的问题。
现在我如何通知调用者一些错误情况?
最佳答案
制作一个名为 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/