클래스를 만들어 컨테이너가 std::array
인지 확인합니다. 그러나 std::array
에서 상속 한 컨테이너를 catch 할 수 없습니다. 모든 솔루션?SFINAE를 사용하여 상속 된 클래스를 기반으로 변형 할 수 없음
#include <vector>
#include <array>
#include <iostream>
using namespace std;
template<typename C>
struct container_traits { constexpr static bool is_array = false; };
template<typename T, size_t S>
struct container_traits<std::array<T,S>> { constexpr static bool is_array = true; };
template<typename T, size_t S>
struct A : public std::array<T,S> {};
int main()
{
cout << container_traits<A<int, 5>>::is_array << endl; // must return 1
cout << container_traits<std::array<int, 10>>::is_array << endl; // must return 1
cout << container_traits<std::vector<int>>::is_array << endl; // must return 0
return 0;
}
__is_base_of type_traits가있는 enable_if를 사용해 보셨습니까? – Alon
@ Alon : 이중 밑줄을 사용하지 마십시오! 그것들은 구현 세부 사항입니다. 대신'std :: is_base_of'를 사용하십시오. – Xeo
상속 또는 템플릿? 하나를 선택. –