- 论坛徽章:
- 0
|
我也是前几天看到特化模板。whyglinux说的的 ”对于模版函数和特例函数,如果参数个数不同,可能重载是唯一的手段;如果参数个数一致,优先使用特化。“,是针对楼主模板template<typenate T> max() 和 完全特化版本的template<>max,如果有一般的函数max()存在且参数符合应用,如楼主的max(char*,char*)版本,应用程序优先选择一般函数,一下为测试代码,环境为linux 2.6
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
template<class T>
T maxx(T& a,T& b)
{
cout<<"template<class T> char* maxx(char* a,char* b)"<<endl;
return a>b?a:b;
}
const char* maxx(char* a,char* b)
{
cout<<"char* maxx(char* a,char* b)"<<endl;
if(strcmp(a,b))return a;
return b;
}
template<>
const char* maxx(const char* &a,const char* &b)
{
cout<<"template<> char* maxx(char* a,char* b)"<<endl;
if(strcmp(a,b))return a;
return b;
}
int main()
{
char* a="abc",*b="ssd";
cout<<maxx(a,b)<<endl;
return 0;
}
最后输出为:
char* maxx(char* a,char* b)
abc |
|