类模板
文章目录
声明
类模板的声明语法如下
template<typename 类型参数, typename 类型参数, ...>
class className
{
//TODO;
}
这里面的typename
相当于一种正常的类型参数,是在使用该类的时候声明的,在类中可以看作一个正常的内置类型来使用。
typename
也可以用class
进行替换
类模板不同于函数模板的地方在于,可以同时拥有类型参数(如class Elem
)和表达式参数(如unsigned Size
),表达式参数可以是如下的类型:
- 具有整型或枚举的值
- 指向对象的指针或到对象的引用
- 指向函数的指针或到函数的引用
- 指向类成员函数的指针
同时含有类型参数和表达式参数的类举例
template<typename Elem, unsigned row, unsigned col> class matrix { private: Elem** data; //这里把类型参数像内置类型一样使用 public: matrix(); //无参构造函数,调用了row和col }; typename<typename Elem, unsigned row, unsigned col> //因为下面的函数定义用到了模板变量,这里要进行声明 matrix<Elem,row,col>() { data = new Elem*[row]; //声明了一个二维数组,行和列用的是表达式参数,可以看到表达式参数的使用和使用常量是比较类似的 for(int i = 0; i < row; i++) data[i]