今日、私は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
これの例です。)