我们正在将我们的代码库从Objective-C移植到C ++ 11.在Obj-C中,大多数每个对象都继承自NSObject,然后你只传递指针。这对于错误非常方便,因为通常只需返回nil(null)就可以让调用者知道没有对象。在移植到C ++时,我已经开始遇到这样一个事实:没有真正的并行(或者至少用内存管理这样做会很难看)。即使对于非严重错误,库通常只会向调用者抛出异常吗?你怎么知道什么层适合抓住它?通过引用传递错误变量更加犹豫不决吗?
答案 0 :(得分:1)
std::optional
是一种很好的方法(正如user202729在他的评论中指出的那样)。
如果你不支持C ++ 17,你可以使用boost::optional
,这与C ++ 17的std :: optional几乎相同。
如果您还想在出现错误时返回信息数据(例如错误字符串),您应该查看" expect"。 它既没有进入STL,也没有进入提升,但是已经提出了STL的建议: https://github.com/viboes/std-make/blob/master/doc/proposal/expected/DXXXXR0_expected.pdf 并且有一些独立的实现可用,例如。 G。: https://github.com/martinmoene/expected-lite