#include <iostream>
using namespace std;
template<typename T>
void fun(T t)
{
cout << "match T" << endl;
}
template<>
void fun(int const& t)
{
cout <<"match int const & "<<endl;
}
int main(int argc, char* argv[])
{
const int x =12;
const int& y =x;
fun(x); //why not the second?
fun(y); //why?
fun(4);//why?
return 0;
}
Output:
match T
match T
match T
我们知道在函数模板重载解析后,编译器应该从选定的基函数模板中选择最匹配的特化?规则是什么?
这是两个不同的模板!
你想做的是
template<>
void fun<const int>(const int& t)
{
cout << "match const int & " << endl;
}
注意两件事:
- 对于特化函数,指定特化的<>运算符在函数名之后
const type
和 type const
原则上是两个不同的东西;当 type
是一个指针时(它是一个常量指针还是一个指向常量的指针?),这就变得很棘手了!
此外,正如评论已经指出的那样,没有充分的理由在此处使用模板。一个简单的重载函数就可以了。
我是一名优秀的程序员,十分优秀!