2013-05-27 21 views

回答

2

不,它不是。那么,在Turing tar pit中,每一个足够强大的编程技术都相当于其他所有的编程技术。

template<typename A, typename B> 
struct foo:std::false_type {}; 
template<typename T> 
struct foo<T,T>:std::true_type {}; 

在这里,我的部分专业化将两个参数映射到一个。更高级的东西,如:

template<typename T> 
struct foo<T,std::vector<T>>:std::integral_constant<int, 7> {}; 

也是可能的。

你甚至可以带一个参数:template做到这一点:

template<typename T> 
struct is_func_signature : std::false_type {}; 

template<typename R, typename... Args> 
struct is_func_signature< R(Args...) >: std::true_type {}; 

我们模式匹配一​​个参数上许多类型的参数,并提取它们。

部分专业化是对参数进行模式匹配的游戏,该参数将对第一个接口有效。

+0

我假设每个偏分模板本身就是它自己的类,与初始泛型类的成员没有内在关系,对吧? – johnbakers

+0

@Fellowshee:是的,每个专业都是一个完全独立的课程。它们之间的唯一关系是相同的名称可以选择任何专业化(取决于参数)。 –