用途
让程序员编写与类型无关的代码,增强重用性;
格式
- 函数模板
template<typename 形参名1,class 形参名2> 返回类型 函数名(参数列表) {函数体}
实例化:函数名(实参1,实参2)
,如fun(a,b)
Note:函数模板实例化可以不指定数据类型,进行自动推导
- 类模板
template<typename 形参名1,class 形参名2> class 类名{ ... }
-
实例化:
类名 <类型> 类的对象
,如A<int> m - 类模板外部定义成员函数:
template<class 形参1,class 形参2> 函数返回类型 类名 <形参1,形参2>::函数名(参数列表){}
如:template<class T1,class T2> void A<T1,T2>::h(){}
Note:类模板实例化必须指定数据类型
说明
- <>括号内参数叫模板形参,不能为空;
- typename和class在<>中作用相同,均为类型指示符;
- 只对template其下第一个函数有效;
普通函数与模板函数
函数调用时优先调用普通函数;
普通函数可以自动类型转换(如char变int);
严格类型匹配时调用模板函数。
注意
模板的定义和声明只能在全局,命名空间或类范围内,不能在main等函数中声明、定义;