2016-03-21 39 views
4

我想按类型组专门化模板,也可以通过一些特定简单类型的额外定义来专门化模板。它是在C++ 11中并且可能提升1.60?下面的伪代码说明了我的意图:按类型组合的C++模板特化与基本类型相结合

template <typename T> // Universal definition 
struct convert 
{ ... } 

template <> /* Definition for integral types like defined by std::type_traits */ 
struct convert<integral_types> 
{ ... } 

template <> /* Definition for floating point types like defined by type_traits */ 
struct convert<floating_types> 
{ ... } 

template <> /* Exception from integral types - specific definition */ 
struct convert<char> 
{ ... } 

,我认为这可以通过标签分配器来解决,但我不知道这是否是最好的解决办法。另一种选择是enable_if,与is_integral(以及类似的团体)合并,但简单char类型是问题...

回答

8

你可以这样做:

template <typename T, typename Enabler = void> // Universal definition 
struct convert 
{ ... }; 

template <typename T> /* Definition for integral types like defined by std::type_traits */ 
struct convert<T, std::enable_if_t<std::is_integral<T>::value>> 
{ ... }; 

template <> /* Exception from integral types - specific definition */ 
struct convert<char, void> 
{ ... }; 
+2

注:如果你只有C++ 11(因此定义了'std :: enable_if_t':'template using enable_if_t = typename std :: enable_if :: type;'' –