26

Today I came to know that C++ allows non-type template parameters of type std::nullptr_t:

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

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

For the life of me, I cannot come up with any sensible use-case for these. Can anyone please come up with a rationale for this?

4

2 回答 2

23

似乎允许使用指针类型和值来避免特殊情况模板的需要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也应该是。

于 2012-12-02T01:02:55.597 回答
9

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

template <typename T, T Value> struct Foo;

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

这没有什么坏处。

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

于 2012-12-02T01:01:36.417 回答