模板函数匹配是一般规则是:
1. 先匹配模板及其重载(模板本身的匹配)
2. 上面一步没匹配到的话,再继续匹配特例化模板(模板实例化的匹配)
可以看看下面的代码:
// Example program
#include <iostream>
#include <string>
using namespace std;
template<class T> /// 1
void foo(T t) {
cout << 0;
}
template<> ///2
void foo<int*>(int* t) {
cout << 20;
}
template<class T> ///3
void foo (T* t) {
cout << 30;
}
int main()
{
int i = 20;
foo(&i);
}
输出结果:
30
可见跳过了2,直接匹配了3的模板,再次印证了那句话,先把模板本身都匹配一遍,
然后再去考虑特理化的版本。
本文探讨了C++中模板函数的匹配规则,通过一个示例程序解释了模板函数匹配的顺序:首先尝试匹配模板本身,然后匹配特例化模板。在示例中,模板函数的普通重载优先于特例化模板,导致输出结果为30。
2346

被折叠的 条评论
为什么被折叠?



