在代码中包含函数模板本身并不会生成函数定义,它只是一个用于函数定义的方案。 模板类或模板函数并不是真正的类或函数,它们是编译器指令,说明如何生成类或函数,模板的具体实现可以分为实例化和具体化。
编译器使用模板为特定类型生成函数定义时,得到的是模板实例。
1、实例化:实例化有两种形式,分别为显式实例化和隐式实例化。模板并非函数定义,实例式函数定义。
模板例子:
template <typename T>
void Swap(T &a, T &b)
(1)显示实例化:直接命令编译器创建特定的实例。
声明方式:
(a)直接在程序中使用函数创建。
eg:Swap<int>(a,b);
(b)声明所需要的种类——用<>符号指示类型,并在声明前加上关键字template。
eg:template void Swap<int>(int, int);
(2)隐形实例化:函数调用导致编译器生成改该函数的实例。使用模板之前,编译器不生成模板的声明和定义示例,后面有程序用了,编译器才会根据模板生成一个实例函数。