一.什么是函数模板
在介绍函数模板前先看段代码:
对,就是函数重载,我们知道函数重载基于不同数据类型实现类似操作,那么如果数据类型比较多的时候怎么办呢?只要有新类型出现,就要重新添加对应函数,而且代码函数体都相同,但代码复用率却不高。那么可不可以使用预处理指令,可以,但是安全性却不高。所以我们引入函数模板。那什么是函数模板?
函数模板:
代表了一个函数家族,该函数与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。
二.函数模板的语法:
函数模板的定义格式:
template<typename Param1, typename Param2,...,class Paramn>
返回值类型 函数名(参数列表)
{
...
}
其中template是声明函数模板的关键字。<typename Param1, typename Param2,...,class Paramn>为模板参数表 typename定义模板参数的关键字当然也可以是class(但不可以使用struct),
模板函数也可定义成内联函数:
template<typename T>
inline T Add(const T _left, const T _right)
{
return (_left + _right);
}
注意:inline关键字必须放在模板形参表之后,返回值之前,不能放在template之前。
**模板是一个蓝图,它本身不是类或者函数,编译器用模板产生指定的类或者函数的特定类型版本,产
生模板特定类型的过程称为函数模板实例化。
函数模板实例化:
template <typename T>
void swap(T &x,T &y)
{
T temp;
temp = x;
x = y;
y = temp;
}
void main()
{
int x = 8;
int y = 6;
cout <<"交换位置前x,y的值x =" << x <<" " << "y = "<< y << endl;
swap(x,y);
cout <<"交换位置后x,y的值x =" << x <<" " << "y = "<< y << endl;
float a = 2.6f;
float b = 5.8f;
cout <<"交换位置前a,b的值a =" << a <<" " << "b = "<< b << endl;
swap(a,b);
cout <<"交换位置后a,b的值a =" << a <<" " <<