1,函数模板
函数模板即允许多个函数定义简化成用统一的函数定义形式来描述。实际上,函数模板表示了一组同名函数,这些同名函数之间,都是重载函数。
函数模板定义的一般形式是:
template <模板参数表>
函数类型标志符 函数名(形式参数列表)
{
//函数体
}
2,模板函数
函数模板是模板定义,它指明了通用的函数参数。函数模板仅能定义一次,它建立了能在不同数据类型的基础上执行相同操作的通用函数。函数模板定义仅仅是一个形式上的通用函数定义,C++编译器并不为函数模板定义产生任何程序代码。在C++程序中,可以给函数模板的类属类型指定具体的数据类型。C++编译器通过程序中对函数模板调用时所给定的参数类型器检验是否与类属属性相匹配,若是,则以该实参类型替换类属类型,生成一个实在的函数定义,称为模板函数。这个过程就是函数模板定义实例化。C++编译器所编译的就是这个新建立的模板函数,它是一个重载函数。
实际上,C++编译器在对重载函数进行处理时,首先试图去匹配一般的重载函数,如果匹配不上,再试图去匹配函数模板,如果任然匹配不上,还有可能对一般的重载函数中的参数类型进行必要的、可行的隐式类型转换后再去匹配。
例子:
#include <iostream>
#include <string.h>
using namespace std;
template <typename T>
T fun(T a, T b)
{
return a+b;
}
int fun(int a,int b)
{
return a-b;
}
int main()
{
int a=20,b=40;
float c=2.4,d=8.9;
int result=fun(a,b);
float R=fun(c,d);
printf("result=%d,R=%f\n",result,R);
return 0;
}
程序结果,result=-20,而不是60。R=11.300000