标签:
C++中的模板特化不同于模板的实例化,模板参数在某种特定类型下的具体实现称为模板的特化。模板特化有时也称之为模板的具体化,分别有函数模板特化和类模板特化。
#include <iostream>
using namespace std;
template<typename T> T Max(T t1,T t2){
return (t1>t2)?t1:t2;
}
typedef const char* CCP;
template<> CCP Max<CCP>(CCP s1,CCP s2){
return (strcmp(s1,s2)>0)?s1:s2;
}
int main(){
//调用实例:int Max<int>(int,int)
int i=Max(10,5);
//调用显示特化:const char* Max<const char*>(const char*,const char*)
const char* p=Max<const char*>("very","good");
cout<<"i:"<<i<<endl;
cout<<"p:"<<p<<endl;
}
程序正常编译运行结果:
typedef const char* CCP;
CCP Max(CCP s1,CCP s2){
return (strcmp(s1,s2)>0)?s1:s2;
}
程序运行结果和使用函数模板特化相同。但是,使用普通函数重载和使用模板特化还是有不同之处,主要表现在如下两个方面:
#include <iostream>
using namespace std;
template<typename T>class A{
T num;
public:
A(){
num=T(6.6);
}
void print(){
cout<<"A‘num:"<<num<<endl;
}
};
template<>class A<char*>{
char* str;
public:
A(){
str="A‘ special definition ";
}
void print(){
cout<<str<<endl;
}
};
int main(){
A<int> a1; //显示模板实参的隐式实例化
a1.print();
A<char*> a2;//使用特化的类模板
A2.print();
}
程序输出结果如下:
标签:
原文地址:http://www.cnblogs.com/carsonzhu/p/5374973.html