首先呢,类模板的声明方式为
template<typename T>或者template<class T>
class A:{};
需要注意的是,此时这个类模板的类名已经变成了A<T>,而不是A。
也就是说,在类外定义成员函数的时候,A就变成A<T>,比如作用域限定要从A::变成A<T>::。
而在类内,A和A<T>是等价的,所以类内是可以用A的。
还有一点很容易忽略的是,每次声明类模板之后,类模板的作用域都为下一个函数或者类,当离开了作用域后,类模板的声明就失效了,需要重新声明,这也是为什么类内不用重新声明类模板的原因。
当将类模板实例化时,它就成了一个模板类(实例化其实就是定义了一个对象)如:
A<类型名> a;