类模板中的数据成员和函数成员都可以使用模板参数中的待定类型。
与函数模板不同,类模板在实例化时必须制定模板参数的类型。因为创建对象必须要有一个明确的类,只有指定模板参数的类型,才能保证在对象创建之前先实例化一个与对象相关版本的类。
template<typename T>class Test{
public:
Test(T a):a(a){}
void set(const T& a){this->a=a;}
T get(){return a;}
private:
T a;
};
Test<int> t1(100);
Test<char> t2('a');
类模板的声明以关键字template开头,后面跟着模板参数列表,列表中每个模板参数都用typename关键字修饰,多个模板参数用逗号分隔。每个模板参数表示一个待定的类型,类中的数据成员和函数成员都可以使用这种待定类型。