26

今日、私はC++がタイプの非タイプテンプレートパラメータを許可することを知りましたstd::nullptr_t

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

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

私の一生の間、私はこれらの賢明なユースケースを思い付くことができません。誰かがこれの論理的根拠を考え出すことができますか?

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 に答える