mr_*_*r_T 24 c++ return-value optional c++11
显然,std::optional如果使用C++ 17或boost,则从函数返回可选值是最佳选择(另请参阅GOTW#90)
std::optional<double> possiblyFailingCalculation()
Run Code Online (Sandbox Code Playgroud)
但是,如果一个人坚持使用旧版本(并且不能使用提升),那么什么以及为什么会是最好的选择呢?
我看到几个选项:
STL智能指针(仅限C++ 11)
std::unique_ptr<double> possiblyFailingCalculation();
Run Code Online (Sandbox Code Playgroud)
将它与bool配对
std::pair<double,bool> possiblyFailingCalculation();
Run Code Online (Sandbox Code Playgroud)老式
bool possiblyFailingCalculation(double& output);
Run Code Online (Sandbox Code Playgroud)
auto value = calculation() 样式不兼容 一个DIY模板:一个具有相同功能的基本模板很容易编码,但是实现一个健壮的std::optional<T>外观模板是否有任何陷阱?
抛出一个例外
Bar*_*rry 23
std::optional和它的boost::optional父母一样,是一个非常基本的类模板.它是一个bool存储,一些便利成员函数,其中大多数是一行代码和一个断言.
DIY选项绝对是首选.(1)涉及分配和(2),(3)涉及必须构建一个T即使你想要一个空值 - 这根本不重要,double但对更昂贵的类型也很重要.对于(5),例外不是替代optional.
您始终可以将您的实施与Boost进行比较.毕竟,它只是一个小型的标题库.
| 归档时间: |
|
| 查看次数: |
5071 次 |
| 最近记录: |