C++ 中是否有标准数据类型能够表示未设置、已设置但为空以及设置了有效值?

Mar*_*kus 1 c++ data-structures

我正在处理的数据项基本上可以具有三种状态:

  1. 不存在
  2. 存在和空虚
  3. 存在且不为空(有效值)

我目前正在使用 a 来实现它来std::optional区分不存在和存在,并且我使用一个特殊值来表示空。

我一直在考虑使用 eg std::optional<std::optional<int>>,但在走这条路之前:是否有一些普遍同意的可用数据类型能够更好地传达概念信息?

更新:

添加更多上下文来说明我为什么要这样做:我正在处理具有某些可选数据字段的外部消息,并且每个数据字段都有一个特定的保留值(表示空),以及一组受限制的允许值。在处理链的更下游,我需要能够区分每个项目的三种不同状态,因为每种情况下都应该发生不同的操作。

更新2:

例如,该值可以是能够表示空的值(例如std::string),或者是没有空概念的数字。

Sim*_*mer 7

std::optional<std::optional<int>>应该给你你想要的东西,但在语法上可能很难使用。

例如,您可以将 astd::variant与自定义类型一起使用。

namespace my {
  struct missing{};
  struct empty{};

  template <typename T>
  using data = std::variant<missing, empty, T>;
}
Run Code Online (Sandbox Code Playgroud)

或者您可以编写一个按您需要运行的自定义数据类。