2012-12-05 3 views
0

두 가지 방법을 구현하지 않는 템플릿이 있습니다.C++, 템플릿 템플릿 지정

사양을 제공하는 클래스에 대해서만 템플릿 사양 인 클래스 만 사용하고 싶습니다.

예 :

template<class T> class Temp 
{ 
    void Method1(); 
}; 

Temp<int>::method1() {...} 

가 지금은

template<class General> void Temp<General> method1() {...} 

같은 사양의 템플릿 유형을 제공 할 그리고 나는 General을있는 유형 지정합니다.

C++ 구문을 사용하여 어떻게 처리 할 수 ​​있습니까?

+0

에 따라 이제

#include <type_traits> template <class T, class... Candidates> struct is_one_of; /* alternative 1 - too complicated template <class T, class Head, class... Tail> struct is_one_of<T, Head, Tail...> : std::integral_constant<bool, std::is_same<T, Head>::value || is_one_of<T, Tail...>::value> {}; */ /* better alternative - thanks, Dan */ template <class T, class Head, class... Tail> struct is_one_of<T, Head, Tail...> : is_one_of<T, Tail...> {} template <class T, class... Tail> struct is_one_of<T, T, Tail...> : std::true_type {} /* needed for both alternatives */ template <class T> struct is_one_of<T> : std::false_type {}; 

enable_if 당신 전문화 ... 미안 내가있는 경우 오타 – Taru

답변

1

알려진 유형의 목록에 대해 여러 가지 전문화를 제공하려는 것 같습니다. 이를 위해 SFINAE (예 : std::enable_if) 및 일부 템플릿 메타 프로그래밍을 사용할 수 있습니다.

당신에게 아이디어를 제공하려면 : BTW 모바일에서 보낸 is_one_of<T, ?your-list-of-General-types-here?>

+0

또는 템플릿 <클래스 T, 클래스 머리, 클래스 ... 꼬리> struct is_one_of : is_one_of {}; 템플릿 구조체 is_one_of : std :: true_type {}; – Dan

+0

@ Dan 감사, 내 대답 편집 –

관련 문제