类模板 特例化
1.隐式实例化
ep:
ArrayTp<int,100> stuff;
ep:
ArrayTp<int,100> *pp; //第二条才被实例化生成类定义,且在编译器需要对象前不会隐式实例化
pp=new ArrayTp<int,100>;
2.显式实例化
ep:
template class ArrayTp<int,100>;
虽然没有创建或提及类对象 但还是会生成类声明(包含定义)
3.显式特例化
ep:
原类
template <typename T>
class ArrayTp
{
…
};
现特例(指明T为char*)
template <>
class ArrayTp<char *>
{
…
};
4.部分特例化
ep1:
//general template
template <class T1,class T2> class pail {……};
//specialization
template <class T1> class pail<T1,int> {……};
ep2:
template <class T*> class Feeb {……};
//有 Feeb<char *> fb; 则T被替换为 char
ep3:
//general template
template <class T1,class T2,class T3> class pail {……};
//specialization
template <class T1,class T2> class pail<T1,T2,T2> {……};
//specialization
template <class T1> class pail<T1,T1*,T1*> {……};
*************************************************************
pail<int,short,char*> t1;//use ep1
pail<int,short,char*> t1;//use ep2
pail<int,char*,char*> t1;//use ep3


浙公网安备 33010602011771号