2013-06-03 27 views
22

Czy możliwe jest sprawdzenie, czy typ T jest typu dowolnego i ma dowolny numer std::array?C++ 11 cecha typu is_same dla szablonów

mogę sprawdzić dla danej tablicy, na przykład:

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

Ale chciałbym, aby sprawdzić, czy jest jakikolwiek T instancji z std::array. Coś jak poniżej (co, oczywiście, nie skompilować):

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

Czy istnieje sposób, aby osiągnąć ten cel (może nie używając is_same)?

+0

Można napisać rodzajowe 'is_same_template' i powiedzieć' is_same_template '. Kompilator musi jednak obsługiwać reguły nazw klasy C++ 11. –

Odpowiedz

32

Musisz napisać własną rękę, ale jest prosta:

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 {};