2012-12-05 33 views
0

我有一個模板不能實現兩種方法。C++,模板模板規範

我只想使用模板規範的類,對於那些提供規範的類。

例子:

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

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

現在我想爲規範提供一個模板類型,像

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

我會指定類型的General

我該怎麼用C++語法來做到這一點?

+0

從移動BTW發送...對不起,如果我有一些錯別字 – Taru

回答

1

看來你想爲已知類型的列表提供一組專業化。要做到這一點,您可以使用SFINAE(例如std::enable_if)和一些模板元編程。

爲了給你一個想法:

#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你專長取決於is_one_of<T, ?your-list-of-General-types-here?>

+0

或者, 模板<類T, class Head,class ...尾> struct is_one_of :is_one_of {}; template struct is_one_of :std :: true_type {}; – Dan

+0

@丹恩謝謝,編輯我的答案 –