类模板是用来生成类的蓝图的,与函数模板的不同之处是,编译器不能为类模板推断模板参数类型。
模板类也是模板,必须以关键字template开头,后接模板形参表。
1、类模板格式
template<class 形参名1, class 形参名2, ...class 形参名n>
class 类名
{ ... };
2、类模板实例化
只要有一种不同的类型,编译器就会实例化出一个对应的类。
SeqList<int > sl1;
SeqList<double > sl2;
当定义上述两种类型的顺序表时,编译器会使用int和double分别代替模板形参,重新编写SeqList类,最后创建名为SeqList<int>和SeqList<double>的类。
一个类模板的每个实例都形成一个独立的类。
类模板的名字不是一个类型名,。类模板用来实例化类型,而一个实例化的类型总是包含模板参数的。
一个类模板中的代码如果使用了另外一个模板,通常不将一个实际类型(或值)的名字用作其模板形参。相反的,我们通常将模板自己的参数当做被使用模板的实参。
3、类模板的成员函数
与其他任何类相同,我们既可以在类模板内部,也可以在类模板外部为其定义成员函数,且定义在类模板内的成员函数被隐式声明为内联函数。
类模板的成员函数本身是一个普通函数,但是,类模板的每个实例都有其自己版本的成员函数。因此,类模板的成员函数具有和模板相同的模板参数,因而,定义在类模板之外的成员函数就必须以关键字template,后接模板参数列表。