在C++中有没有一个标准的数据类型能够表示未设置、设置但为空以及设置了有效值?

wkftcu5l  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(158)

我处理的数据项基本上可以有三种状态:
1.不存在
1.存在且空
1.存在且不为空(有效值)
我目前正在用std::optional来实现它,以区分不存在和存在,并且我使用一个特殊值来表示空。
我一直在考虑使用std::optional<std::optional<int>>,但在此之前:是否有一些公认的可用数据类型能够更好地传达概念信息?
更新:
要添加更多关于 * 为什么 * 我想这样做的上下文:我处理的外部消息有一些可选的数据字段,每个数据字段都有一个特定的保留值(表示 empty),加上一组有限的允许值。在处理链的下游,我需要能够区分每个项目的三种不同状态,因为在每种情况下应该发生不同的操作。
更新2:
该值例如可以是能够表示 * 空 * 的值(例如像std::string),或者是没有空概念的数字。

mm5n2pyu

mm5n2pyu1#

std::optional<std::optional<int>>应该可以给予您所需要的,但可能在语法上难以使用。
例如,您可以使用带有自定义类型的std::variant

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

  template <typename T>
  using data = std::variant<missing, empty, T>;
}

或者,您可以编写一个自定义数据类,使其按照您需要的方式工作。

相关问题