类模板 特例化

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

 

 

posted @ 2007-03-07 07:06  Edward Xie  阅读(1442)  评论(0)    收藏  举报