前序文章请看:
C++模板元编程详细教程(之一)
C++模板元编程详细教程(之二)
C++模板元编程详细教程(之三)
偏特化模板的匹配优先级
在前面的章节我们提到了多种偏特化的模板的匹配优先级问题,那么当遇到多种偏特化时到底以哪一个为准呢?
这里,匹配优先级的原则是:优先匹配特化程度更高的。那么,怎么理解这个特化程度呢?我们先来举个最简单例子:
template <typename T1, typename T2, typename T3>
struct Test {
}; // 【0】
template <typename T1, typename T2>
struct Test<T1, T2, int> {
}; // 【1】
template <typename T>
struct Test<T, int, int> {
}; // 【2】
void Demo() {
Test<double, int, int> t; // 匹配【2】而不是【1】
}
上面这个很好理解,因为Test<double, int, int>显然是【2】更加符合这种形式。
那是不是可以理解成,优先匹配参数少的那个呢?未必?请看下面的实例:
template <typename T1, typename T2, typename T3>
struct Test {
}; // 【0】
template <typename T1, typename T2>
struct Test<T1, T2, int> {
}; // 【1】
template <typename T>
struct Test<int

最低0.47元/天 解锁文章
1713





