在 C++11 上下文中使用 std::可选

Using std::optional in a C++11 context

本文关键字:std 可选 C++11 上下文      更新时间:2023-10-16

我正在编写一个小的 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。