我正在使用错误代码来处理我的 C++ 项目中的错误。问题是如何从应该返回某些变量/对象的函数返回错误代码。
考虑一下:
long val = myobject.doSomething();
这里,myobject 是某个类的对象。如果 doSomething 函数遇到一些错误情况,那么它应该如何通知调用者(不使用异常)。
可能的解决方案:
- 类中有一个数据成员(比如 err_),可以由调用者检查。但在共享同一对象并调用同一函数的多线程应用程序中,这是不安全的。
- 使用一些全局错误变量,在多线程环境中再次出现相同的问题。
现在我如何通知调用者某些错误情况?
制作一个模板,例如,Maybe
它由您的返回值类型参数化。每当您返回一个值时,请将其包装在该模板中,如下所示:
Maybe<long> result = object.somemethod();
The 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
模板。您还必须对其进行一些性能调整以避免讨厌的开销。如果您想让它更加灵活,您可以在返回值类型和错误类型上对其进行参数化。 (这只是复杂性的微小增加。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)