在 C++11 上下文中使用 std::可选
Using std::optional in a C++11 context
我正在编写一个小的 C++11 库,我相信std::optional
在某些可以返回nullptr
的函数中将是一个很好的补充。但是,std::optional
是 C++17 功能。由于需要 C++11,因此我正在寻找在保持兼容性的同时使用std::optional
的方法。
我发现可以测试功能宏。我想我可以用它来检测std::optional
是否可用......但是,如果不是,最好的方法是什么?
我应该提供自己的std::optional
实现吗?
std::optional
不可用时返回nullptr
?(可能会弄乱我的代码。
还是放弃这个想法,只nullptr
继续返回?
使用此标头:https://github.com/TartanLlama/optional
它等同于 std::optional。但它也适用于 C++11。 升级到 C++17 时,请将代码切换到#include <optional>
。
在 C++11 中没有使用std::optional
的标准方法。您可以依赖 C++17,也可以使用std::optional
.
我应该提供自己的 std::可选实现吗?
您可以编写自己的可选实现,但不能将其称为std::optional
。或者,您可以使用预先存在的实现,例如 Boost 中的实现。
综上所述,如果您无论如何都要返回指针,那么使用 Optional 可能没有多大意义,因为指针已经具有"空"值的表示形式:null 指针。但是,如果您需要区分 null 和空,那么可选可能很有用。
不应使返回类型依赖于标准版本C++。 标准版本开关旨在能够编译具有不同值的程序的不同部分。 如果您基于此采取不同的行为,您将破坏 ODR。
- 可组合的lambda/std::函数与std::可选
- std::可选实现为联合与字符[]/aligned_storage
- 为什么移动 std::可选不重置状态
- std::可选::value_or()-惰性参数求值
- 用于比较基元类型的std::可选的有趣程序集
- std::可选参数会创建副本吗?
- 在 C++11 上下文中使用 std::可选
- 使用什么 std::可选 or std::unique_ptr
- 为什么null std ::可选的被认为小于任何值,而不是更多
- std::可选的默认构造函数不是 gcc 中的 constexpr?
- 为什么const rvalue合格的std ::可选:: value()返回const rvalue参考
- 如何在C++中使用 std::可选?
- 使用 std::可选标准化,我们可以停止在新代码中使用 nullptr 并弃用它吗?
- clang 5:std ::可选的实例螺钉std :: is_constructiblibstiblesiblinsib
- 使用STD ::可选避免函数中的默认参数有任何优势
- 如何初始化用户定义的数据类型的STD ::可选
- STD ::可选的微不足道默认构造函数
- std::可选和提升::可选是否尊重托管对象的对齐限制?
- 为什么当T不可移动时,STD ::可选的移动构建体不会被删除
- constexpr std ::可选的可能实现