标准 C++ 库中的空类型
Null type in standard C++ library
标准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 {};
但是我已经在代码中多次定义了这种定义。也许对于这种东西存在特殊的标准库类型,我可以在任何地方使用它而不是我定义的空结构。
有 nullptr_t
类型和 nullptr
值,我可以在某些地方使用。但不是全部,因为如果函数或模板参数是指针类型,那么有时我想传递空指针来表示空指针的实际值,而不是值的缺失。这就是为什么对于这种指针类型的情况,最好有一些单独的类型,比如 struct null_type_t {};
,它不会干扰指针或任何其他 class 或内置类型。
std::optional
为此目的使用 std::nullopt_t
:https://en.cppreference.com/w/cpp/utility/optional/nullopt_t
所以对于您自己的可选类型,您应该实现自己的 nullopt_t
。
标准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 {};
但是我已经在代码中多次定义了这种定义。也许对于这种东西存在特殊的标准库类型,我可以在任何地方使用它而不是我定义的空结构。
有 nullptr_t
类型和 nullptr
值,我可以在某些地方使用。但不是全部,因为如果函数或模板参数是指针类型,那么有时我想传递空指针来表示空指针的实际值,而不是值的缺失。这就是为什么对于这种指针类型的情况,最好有一些单独的类型,比如 struct null_type_t {};
,它不会干扰指针或任何其他 class 或内置类型。
std::optional
为此目的使用 std::nullopt_t
:https://en.cppreference.com/w/cpp/utility/optional/nullopt_t
所以对于您自己的可选类型,您应该实现自己的 nullopt_t
。