Каков правильный пример использования параметров шаблона std:: nullptr_t`?
Сегодня я узнал, что С++ разрешает параметры шаблона типа std::nullptr_t
непигового типа:
template<std::nullptr_t N> struct A { };
template<std::nullptr_t N> void f() { }
В моей жизни я не могу придумать какой-либо разумный случай использования. Может ли кто-нибудь придумать для этого обоснование?
Ответы
Ответ 1
Кажется, это позволяет избежать необходимости использования специального шаблона case с использованием типа указателя и значения для 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
тоже должен быть.
Ответ 2
Я думаю, что это наиболее полезно в настройках, подобных этому:
template <typename T, T Value> struct Foo;
Foo<int, 10> x;
Foo<std::nullptr_t, nullptr> y;
В этом нет вреда.
(Может быть, std::integral_constant
является примером этого.)