2013-06-03 708 views
22

Có thể kiểm tra loại T là một loại std::array tùy ý và kích thước không?C++ 11 is_same loại đặc điểm cho các mẫu

tôi có thể kiểm tra một mảng đặc biệt, ví dụ:

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

Nhưng tôi muốn kiểm tra xem T là bất kỳ instantiation của std::array. Một cái gì đó như dưới đây (trong đó, tất nhiên, không biên dịch):

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

Có cách nào để đạt được điều này (có thể không sử dụng is_same)?

+0

Bạn có thể viết một generic 'is_same_template' và nói 'is_same_template '. Trình biên dịch phải hỗ trợ C++ 11 quy tắc tên lớp được tiêm mặc dù. –

Trả lời

32

Bạn phải viết riêng của bạn, nhưng nó đơn giản:

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