类模板
在定义类时也可以将一些类型抽象出来,用模板参数来替换,从而使类更具有通用性。这种类被称为模板类,例如:
template <typename T> class A
{
T data;
public:
//类模板成员函数的定义方式一:在类模板中定义
void print() {cout << data << endl;}
}
//类模板成员函数的定义方式二:在类模板外定义
template<typename T> void A::print(){cout <<data << endl;}
类模板(2)
类模板实例化类后,类实例化成为对象
类模板
类模板的“模板参数”
1.类型参数:使用typename或class标记
2.非类型参数:整数,枚举,指针(指向对象或者函数),引用(引用对象或者引用函数)。其中,整数类型是比较常用的,如:
template<typename T,unsigned size>
class array
{
T elems[size];
...
}
array<char,10> array0;//用类模板实例定义对象
模板参数是另一个类模板
相应的声明形式如下:
template<typename T,template<typename TT0,typename TT1> class A>
struct Foo
{
A<T,T> bar;
};