首先要谈函数模板,先引入一个问题,什么是泛型编程?
来看个例子,如果我们现在要写一个通用类型加法的函数,那我们可能会这么写:
一、泛型编程
//整型
int Add(int x,int y)
{
return x+y;
}
//浮点型
double Add(int x,int y)
{
return x+y;
}
//字符型
char Add(int x,int y)
{
return x+y;
}
我们可能会写出来这样的函数,但是这样写功能上分别都能实现,但是存在着一些缺陷:
1、代码的复用性比较低;
2、不容易维护;
3、不能将所有类型重载出来,顶多是将内置类型重载完成,自定义类型是无法重载的。
可以看出来上面那样的写法,是与变量类型强相关的,而我们要写通用函数,与类型无关的话,最好的方式就是使用模板。
模板是泛型编程的基础。那么函数模板与泛型编程的本质区别在哪呢:
函数模板:可以实现与类型无关的代码
泛型编程:
类型无关;
数据结构无关
二、函数模板
2.1 概念
函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。
2.2 格式
template<typename T1, typename T2,......,typename Tn>
返回值类型 函数名(参数列表){
}
template<class T1, class T2,.....