2013-06-03 12 views
22

Ist es möglich zu überprüfen, ob T ein std::array beliebiger Art und Größe ist?C++ 11 is_same type Merkmal für Vorlagen

Ich kann für eine bestimmte Anordnung überprüfen, zum Beispiel:

is_same<T, std::array<int,5>>::value 

Aber ich möchte prüfen, ob T ist jede Instanziierung std::array. So etwas wie unten (was natürlich nicht kompiliert):

is_same<T, std::array>::value 

Gibt es eine Möglichkeit, dies zu erreichen (vielleicht nicht is_same verwenden)?

+0

Sie können einen generischen 'is_same_template' schreiben und sagen' is_same_template '. Der Compiler muss jedoch die Regeln für die eingefügten C++ 11-Klassennamen unterstützen. –

Antwort

32

Sie haben eine eigene schreiben, aber es ist ganz einfach:

template<typename> 
struct is_std_array : std::false_type {}; 

template<typename T, std::size_t N> 
struct is_std_array<std::array<T,N>> : std::true_type {};