1

这两个专业在本质上做同样的事情吗?

//generic:
template<class T>
struct A{
  ...
 }

template<class T>
struct A<int>{
  ...
 }

template<>
struct A<int>{
  ...
 } 

也就是说,在我看来,任何部分专业化都可以重写为完全专业化。

4

1 回答 1

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 {};

我们在许多类型参数上对一个参数进行模式匹配,然后提取它们。

部分特化是对第一个接口有效的参数的模式匹配游戏。

于 2013-05-27T03:05:19.020 回答