标签:
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