类模板提供了一种根据模板自动生成类的机制。
类模板的定义如下:
template
class classname
{ public:
(static,const,friend) 成员函数
....;
private:
(static,const)数据成员
.....;
}
类模板的类型参数param1/2由class表明,没有指定类型,运行时param1/2会被具体的类型替换,这叫模板实例化;非类型参数param3就必须指定类型。如果在全局域中声明了与类型参数同名的变量,那么在类模板中该类型会屏蔽掉全局域中的变量,类型参数相互间不能同名,param1不能等于param2.类型参数与非类型参数都可以有缺省参数。
类模板的特化:
1.类模板成员函数的全特化:
一个类模板中定义了成员函数,但是该成员函数使用了模板参数中没有定义的一些operator运算,这时就需要对成员函数进行特化处理。
在类模板定义的头文件里加上成员函数的显示特化声明
template<> classname 类模板名 < classname>:: 成员函数名()
在相应的源文件中进行特化的定义
{使用在classname中定义的函数替代operator}
2.类模板的全特化:
也可以进行整个类的特换处理,因为某个类参数不适合该类模板。
类全特化定义如下
template<> class classname<类参数>
{..}
3.类模板的偏特化
只对类模板的部分参数进行特化。
template<不要进行特化的参数>
class name <不要进行特化的参数,要特化的参数>
阅读(807) | 评论(0) | 转发(0) |