(一)函数模板可以定义任意多个不同类型的参数
template
<typename T1,typename T2,typename T3>
T1 Add(T2 a,T3 b)
{
return static_cast(a+b);
}
int r = Ass<int ,float,double>(0.5,0.8);
(二)对于多参数函数模板
1:无法自动推导返回值类型
2:可以从左向右部分指定类型参数
//T1 = int, T2 = double,T3 = double
int r1 = Add(0.5,0.8);
//T1 = int, T2 = double,T3 = double
int r2 = Add<int,float>(0.5,0.8);
//T1 = int, T2 = double,T3 = double
int r2 = Add<int,float,double>(0.5,0.8);
工程中将返回值参数作为第一个类型参数
(三)当函数重载遇见函数模板回发生什么?
1:函数模板可以像普通函数一样重载
2:c++编译器优先考虑普通函数
3:如果函数模板可以产生一个更好的匹配,那么选择模板
4:可以通过空模板实参列表限定编译器只匹配模板
int r1 = Max(1,2);
double r2 = Max<限定编译器只匹配函数模板>(0.5,0.8)
小结:
1:函数模板通过具体类型产生不同的函数
2“:函数模板可以定义任意多个不同的类型参数
3:函数模板中的返回值类型必须显示指定
4:函数模板可以像普通函数一样被重载