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.注意事项
函数模板只适用于函数体相同、函数的参数个数相同而类型不同的情况,如果参数的个数不同,则不能用函数模板。