什么是模板?
就是告诉编译器一个模子,让编译器根据不同的类型生成不同的代码。
编写与类型无关的函数,是代码复用的一种手段。
函数模板
template<typename T>
void Swap( T& left, T& right)
{
T temp = left;
left = right;
right = temp;
}
用这种方式定义函数模板就完成了代码的复用,模板函数工作的原理就是在编译阶段编译器对传入的实参进行推演出合适的函数
模板函数的实例化
分为显示实例化和隐式实例化
隐式实例化:让编译器根据实参推演模板参数的实际类型,当所传的参数类型编译器无法进行推演时(模板类型只有一个而实参类型有多个),有两种处理方式:1.类型转化 2.显示实例化
显式实例化:在函数名后的<>中指定模板参数的实际类型
注意:一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数
,当模板函数和同名自定义函数同时存在时优先调用自定义函数,可以通过显式调用来调用模板函数,
模板函数不允许自动类型转换,普通函数可以
同样的类模板与其相同原理