1.函数模板实际上是建立一个通用函数,其函**数类型和形参类型不具体指定,用一个虚拟的类型来代表这个通用函数就称为函数模板。
凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可
调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同函数的功能。
定义函数模板的一般形式:template
或template - 类型参数不只一个,可根据需要确定个数。
例:
#include <iostream>
using namespace std;
template<typename T> //模板声明,其中T为类 型参数
T max(T a,T b,T c) //定义一个通用函数,用T 作虚拟的类型名
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
int main( )
{
int i1=185,i2=-76,i3=567,i;
double d1=56.87,d2=90.23,d3=-3214.78,d;
long g1=67854,g2=-912456,g3=673456,g;
i=max(i1,i2,i3); //调用模板函数,此时T被int取代
d=max(d1,d2,d3); //调用模板函数,此时T被double取代
g=max(g1,g2,g3); //调用模板函数,此时T被long取代
cout<<″i_max=″<<i<<endl;
cout<<″f_max=″<<f<<endl;
cout<<″g_max=″<<g<<endl;
return 0;
}
- 函数模板只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如参数的个数不同,则不能用函数模板。
2.函数重载和函数模板
- 函数模板拓展了函数重载:函数重载让多个函数共享一个函数名,所重载的函数的参数类型必须不同。虽然这些函数所完成的功能完全一样,但必须为每一个重载函数编写代码。
- 一个函数模板可用来生成多个功能相同但参数和返回值的类型不同的函数。
3.含多个类型参数的函数模板
- 定义函数模板时可使用多个类型参数,每个类型参数前只需加上关键字class,用逗号分隔:
template< class T1, class T2, class T3 >。