泛型编程是C++继面向对象编程之后的又一个重点,是为了编写与具体类型无关的代码。而模板是泛型编程的基础。模板简单来理解,可以看作是用宏来实现的,事实上确实有人用宏来实现了模板类似的功能。模板,也可以理解为模具行业的模型。根据分类,有函数模板和类模板。根据传入的不同模板参数,函数模板会生成不同模板函数。类模板则生成不同的模板类。

 

模板参数

1.    概念

模板定义以关键字template开始,<>中是模板参数列表(template parameter list),模板参数列表即表示可以是一个或多个模板参数(template parameter)。

  • 模板实参则是在实例化函数模板或是类模板时的类型或值。
  •  模板形参是通过模板实参推导出来的或是直接显式指定。
  •  模板参数和普通函数参数一样,可以有默认值参数。

2.    模板形参分类

  • 类型参数(type parameter)

表明这个模板参数是一个类型。

template<class/typename T, ……>

  • 非类型参数(nontype parameter)

表明这个模板参数不是一个类型,而是常量数值,只能是整形、指针和引用。