利用函数模板,可以适应传递参数的多种数据类型。既可以实现重载函数的多态性,又能避免写多个同名函数的繁琐庞杂
例:定义一个模板函数cad,实现两个参数数的相加或者字符串的连接。
#include <iostream>
#include<string>
template<class N>N cad(N a1, N a2)
{
return a1 + a2;
}
int main()
{
double i;
int m;
double n;
std::string s;
i = cad(10.25, 12.1);
m = cad(1, 7);
n = cad<double>(1, 7.6);
s = cad<std::string>("hello,", "world!");
std::cout << i << std::endl;
std::cout << m << std::endl;
std::cout << n << std::endl;
std::cout << s << std::endl;
return 0;
}
运行结果如图:
在本例当中,申明了一个模板函数cad。当参数为double时,两个double类型相加(如结果i); 参数为int时,两个int类型的参数相加(如结果m)。当传递的参数为string类型时候,实现了两个字符串的连接。
在函数模板中的参数类型相同,如本例中的cad,参数类型均为N,则可以正常运行;如果参数类型不一致,则会出现编译错误。例如本例中的cad(1,7.6),如果没有加入double类型标识就会出错。而cad<double>(1,7.6)明确的标识了模板类型为double.对参数进行强制转换统一以后再进行计算。cad<std::string>("hello,", "world!");也是一样的。强制将指针转化为string类型则可以使用+作为连接符。