这两个专业化基本上是一样的吗?
//generic:
template<class T>
struct A{
...
}
template<class T>
struct A<int>{
...
}
template<>
struct A<int>{
...
}
也就是说,在我看来,任何部分专业化都可以重写为完全专业化。
答案 0 :(得分:2)
不,不是。好吧,在图灵焦油坑中,每种足够强大的编程技术都是相同的。
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 {};
我们模式匹配许多类型参数的一个参数,并提取它们。
部分特化是对参数进行模式匹配的游戏,对第一个接口有效。