您的位置:首页 > 其它

模板的特化(特化和偏特化)

2010-11-30 16:46 155 查看
模板特化可以分为全特化和偏特化
特化可以为类增加成员函数或成员变量
模板特化有三种类型,一是特化为绝对类型,二是特化为引用、指针类型,三是特化为另外一个模板类
#include<iostream>
#include<cstring>
#include<string>
usingnamespacestd;

template <classT>
TmaxR(Tt1,Tt2)
{
returnt1;
}
template<>
constchar* maxR<constchar*> (constchar* t1,constchar* t2)
{
return (strcmp(t1,t2)<0) ?t2: t1;
}
template<classCT>
classMyClass
{
public:
MyClass()
{

}
CTshow(CTval)
{
cout<<"Class did a good job!"<<val<<endl;
returnval;
}
};
template<>
classMyClass<int>
{
public:
MyClass()
{

}
intshow(intval)
{
cout<<"Special Class did a good job!"<<val<<endl;
returnval;
}

};

template <typenameT1,classT2>
classMyPTClass
{
public:
T1show(T2val)
{
T1hi;
returnhi;
}

T1T1Show(T1t1)
{
cout<<""thisisfromt1<<t1<<endl;
returnt1;
}
T2T2Show(T2t2)
{
cout<<"This is from t2"<<t2<<endl;
returnt2;
}
};
template<classT2>
classMyPTClass<string,T2>
{
public:
stringshow(T2val)
{
stringhi="This is from PTclass";
cout<<hi<<val<<endl;
returnhi;
}
T2T2Show(T2t2)
{
cout<<"This is from t2"<<t2<<endl;
returnt2;
}

};
intmain()
{
constchar * str1="Good";
constchar * str2="bad";
inta=5,b=12;
cout<<maxR(a,b)<<endl;
cout<<maxR(str1,str2)<<endl;
MyClass<int> obj;
obj.show(59);

MyClass<string> obj2;
obj2.show("what the fuck?");

MyPTClass<string,float> PTobj;
PTobj.show(1230);
PTobj.T2Show(3.1415f);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: