1.函数模板的由来和概念:

函数的重载可以实现一个函数名多用,将实现相同的或类似功能的函数用一个函数名来定义。这样编程者在调用同类函数时感到含义清晰,方法简单。但在程序中仍然要分别定义每一个函数,例如求三个数的最大值的函数max,它们的函数体是相同的,只是形参不同(int,double,long).

为了解决这个问题,C++提供了函数模板。所谓函数模板,实际上是建立一个通用函数,其函数类型和参数类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的都可以用这个模板来代替,不必定义多个函数,只须在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同函数的功能。

2.应用举例:

#include <iostream>

using namespace  std;
template <typename T>
T max( T a,T b,T c)
{
	if (b > a)
	{
		a = b;
	}
	if (c > a)
	{
		a = c;
	}
	return a;
}

int main()
{
	int i1 = 185,i2 = -76,i3 = 576,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);
	d = max(d1,d2,d3);
	g = max(g1,g2,g3);
	cout<<"i_max = " <<i<<endl;
	cout<<"d_max = " <<d<<endl;;
	cout<<"g_max = " <<g<<endl;
	return 0;
}

3.定义模板的一般形式

template <typename T>
通用函数定义

或者
template <class T>
通用函数定义

4.注意事项

函数模板只适用于函数体相同、函数的参数个数相同而类型不同的情况,如果参数的个数不同,则不能用函数模板。