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.注意事项
函数模板只适用于函数体相同、函数的参数个数相同而类型不同的情况,如果参数的个数不同,则不能用函数模板。
转载于:https://blog.51cto.com/4022688/1720691