什么是`std :: nullptr_t`模板参数的正确用例?

时间:2012-12-02 00:46:58

标签: c++ templates

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

template<std::nullptr_t N> struct A { };

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

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

2 个答案:

答案 0 :(得分:21)

似乎允许使用指针类型和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也应该是。

答案 1 :(得分:8)

我想这在以下设置中最有用:

template <typename T, T Value> struct Foo;

Foo<int, 10> x;
Foo<std::nullptr_t, nullptr> y;

没有坏处。

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