什么是“std::nullptr_t”模板参数的正确用例

What is a proper use-case of `std::nullptr_t` template parameters?

本文关键字:参数 std nullptr 什么      更新时间:2023-10-16

今天我开始知道C++允许类型std::nullptr_t的非类型模板参数:

template<std::nullptr_t N> struct A { };
template<std::nullptr_t N> void f() { } 

对于我的一生,我无法为这些想出任何明智的用例。任何人都可以为此提出一个理由吗?

似乎允许这样做以避免需要使用指针类型和std::nullptr_t值的特殊情况模板。这样,用例看起来像这样:

template <typename T, T Ptr>
struct pointer_object {
    static T get_pointer() { return Ptr; }
};
int int_ptr(0);
typedef pointer_object<int*, &int_ptr> int_ptr_t;
typedef pointer_object<std::nullptr_t, nullptr> null_ptr_t;

也就是说,指针值可以是模板参数,因此nullptr也应该是模板参数。

我想它在这样的设置中最有用:

template <typename T, T Value> struct Foo;
Foo<int, 10> x;
Foo<std::nullptr_t, nullptr> y;

这无妨。

(也许std::integral_constant就是一个例子。