函数模板是我个人认为不在面向对象内容中的一个非常好用的东西,所以我觉得非常有必要和大家一起分享一下。
首先不同于重载函数,重载函数的功能是一组函数他们的参数类型不同,或者参数个数相同,,实现的功能相似,但是本质他们是多个函数
而函数模板则可以实现类型的泛型化,对于模板中函数,在具体运行的过程中依据实际参数的类型生成相应的模板函数。这个过程则被称作模板的实例化。
上面这么多通俗一点的说法就是比如一个函数
int max(int x,int y)
{
return x>y?x:y;
}
在使用了函数模板以后,int x,int y包括函数类型的int都可以改为其他类型,float,double,bool或者别的,在学过面向对象之后甚至可以使用自己所创建的类型,非常方便。
接下来介绍一下如何写函数模板
template<class T>
T max(T x, T y)
{
return x>y?x:y;
}
在使用的时候那么直接调用max('a','b'),max(1,2),max(3.3,4,4)就可以了
此外函数模板中所指定的T甚至不需要统一
template<class T1,class T2,class T3>
T1 sum(T2 a,T3 b)
{
return a+b;
}
但是这样写不知道大家有没有发现一个问题,如果我直接调用sum('a',2)系统他并不知道函数返回值应该是那个类型,因此我们在进行实例化的时候,如果是这样一定要注意制定好类型,在之后的类模板中这也是非常重要的。调用时候应该这样使用
sum<int,char,int>('a',2);就可以了