一、模板的定义
template<typename T>
以关键字template开头,后面跟一个模板参数列表,列表里面用逗号将多个模板参数隔开定义的注意事项
模板的编译
当编译器遇到一个模板定义时,并不生成代码。只有当实例化处模板的一个特定版本时,编译器才会生成代码
重点:通常,当我们调用一个函数/定义实例化一个类时,编译器只需掌握函数的声明/类的声明即可,因此可以把函数/类的声明放置在头文件,而把函数/类的定义放置在源文件中。但是模板则不同:为了实例化模板函数,编译器必须掌握函数模板/类模板成员函数的声明和定义,因此只能将模板函数/类的声明和定义都放置在头一个头文件/源文件中(重点)
二、函数模板与模板函数
函数模板:一个模板(是模板)
模板函数:调用函数模板时生成的函数(是函数),也称为函数模板的实例化
一个模板参数列表只和一个函数模板相对应。因此每定义一个函数模板就需要重新定义一个模板参数列表
//定义模板以及一个函数模板
template <typename T>int compare(const T &v1, const T &v2);int main(){compare(1, 2); //模板函数,也称为模板的实例化comp