3

我正在编写一个小型 C++11 库,我相信在其中std::optional可以很好地添加一些可以返回nullptr. 但是,std::optional它是 C++17 的一个特性。由于要求是 C++11,因此我正在寻找std::optional在保持兼容性的同时使用的方法。

我发现可以测试功能宏。我想我可以用它来检测是否std::optional可用......但是当它不可用时,最好的方法是什么?

我应该提供自己的std::optional实现吗?

不可用nullptr时退货?std::optional(可能会弄乱我的代码。)

还是放弃这个想法并继续返回nullptr

4

3 回答 3

3

std::optional在 C++11 中没有标准的使用方法。您可以依赖 C++17,也可以不使用std::optional.

我应该提供自己的 std::optional 实现吗?

您可以编写自己的可选实现,但不能调用它std::optional。或者,您可以使用预先存在的实现,例如 Boost 中的实现。

综上所述,如果您无论如何都返回一个指针,那么使用可选的可能没有多大意义,因为指针已经具有“空”值的表示:空指针。但是,如果您需要区分 null 和 empty,那么 optional 可能很有用。

于 2019-08-21T21:45:48.020 回答
2

使用此标头:https ://github.com/TartanLlama/optional

它等效于 std::optional。但它也适用于 C++11。升级到 C++17 时,将代码切换到#include <optional>.

于 2020-10-27T16:22:52.463 回答
0

您不应该使返回类型依赖于 C++ 标准版本。标准版本开关旨在能够编译具有不同值的程序的不同部分。如果您基于此采取不同的行为,您将破坏 ODR。

于 2021-07-19T15:28:01.647 回答