模板的特化(特化和偏特化)
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;
}
特化可以为类增加成员函数或成员变量
模板特化有三种类型,一是特化为绝对类型,二是特化为引用、指针类型,三是特化为另外一个模板类
#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;
}
相关文章推荐
- oop &&GP 模板 ---> 特化和偏特化
- 关于模板中的全特化和偏特化
- 模板的全特化与偏特化
- 模板全特化与偏特化
- C++中模板的特化与偏特化
- C++模板的全特化和偏特化
- C++ 中模板的特化 与 偏特化
- [C++基础]034_C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)
- C++模板的特化与偏特化
- C++模板的特化与偏特化
- oop &&GP 模板 ---> 特化和偏特化
- 模板的特化、偏特化
- 模板的全特化与偏特化
- 第十天2017/04/21(2、泛型编程:模板 / 全特化、偏特化)
- C++ 模板全特化和偏特化
- C++中模板的特化与偏特化
- 模板特化和偏特化
- 模板全特化和偏特化
- C++模板的 主版本模板类、全特化、偏特化
- 模板的特化与偏特化