首先,记住函数模板特化一定需要一个原模版,才能将函数模板特化,否则会报错“不是函数模板的显示特用化”

(注意:原模板和特化的模板要形式一样,不能加其它的东西)

比如:

#include<iostream>
#include<cstring>
typedef const char*pd;
template<typename T> //原模板
T max(T a,T b)
{
return (a>b?a:b);
}
template<> //函数模板特化
pd max<pd>(pd a,pd b)
{
return (strcmp(a,b)>0?a:b);
}
int main()
{
cout<<"max(7,8)="<<max(7,8)<<endl;
s1="hello";
s2="welcome";
cout<<"max(s1,s2)"<<max(s1,s2)<<endl;
return 0;
}

改成这样后是没有出现那个不是函数模板显示化,但是出现了函数max重载,然后我想了想,C++中max函数是系统自带的函数,把max改成Max就好了。