标准C++库中的Null类型



在标准C++库中是否存在一些特殊的null类型和值,例如定义为struct null_type_t {};

我想在不同的地方使用它来表示没有传递任何值。

例如,在下一个模板中使用:

template <typename T = std::null_type_t>
struct S {};

或者在结构上类似下一个:

template <typename T>
struct Optional {
constexpr Optional() = delete;
constexpr Optional(std::null_type_t) {}
template <typename OT>
constexpr Optional(OT const & val)
: has_value(true), value(val) {}
bool const has_value = false;
T const value = T();
};

基本上,如果std::null_type_t类型或值作为模板或函数参数传递,那么我的代码将进行一些特殊处理,即这种null类型表示没有值。

当然,我可以在代码中定义我自己的结构,如下所示:

struct NullType {};

但我已经在代码中做过很多次这种定义了。也许有一种特殊的标准库类型可以用于这类事情,我可以在任何地方使用它,而不是我对null结构的定义。

nullptr_t类型和nullptr值,我可以在某些地方使用。但不是全部,因为如果函数或模板参数是指针类型,那么有时我想传递null指针来表示null指针的真实值,而不是值的缺失。这就是为什么对于这种指针类型的情况,最好有一些单独的类型,比如struct null_type_t {};,它不会干扰指针或任何其他类或内置类型。

std::optional为此目的使用std::nullopt_t:https://en.cppreference.com/w/cpp/utility/optional/nullopt_t

因此,对于您自己的可选类型,您可能应该实现自己的nullopt_t

相关内容

  • 没有找到相关文章

最新更新