C++ 函数模板

来源:互联网 发布:sql数据库查询工具 编辑:程序博客网 时间:2024/05/16 18:00

什么是模板函数:通过函数模板生成的函数。
什么是函数模板:一组定义好的具有和函数类似的结构单元,这类结构单元将变量的类型视为变量,同时该结构定义了一组适用于多种类型的相同的算法逻辑。这类结构类似于函数,但是它们其实一些临时的结果,它们并不存在于最终的二进制文件中。
为什么要模板函数:
假设我们有一个函数:

void swap(int & a,int &b){int temp=a;a=b;b=temp;}

它接受 两个int作为参数,并交换这两个参数的值。
那么如果我们想要为double也写这么一个函数呢?
我们可以会这个样子:
将上面的代码copy下来,然后使用字符串替换的方法 把这个函数里面所有的int都换成 double,这个步骤结果就类似于下面这样子:

void swap(double & a,double &b){int temp=a;a=b;b=temp;}

好像没有上面毛病,那如果我们想让char也可以互换呢?
我们还是把源代码copy过来,无脑替换一下:

void swap(char & a,char &b){int temp=a;a=b;b=temp;}

····
上面的做法也是一种解决问题的方法,但是这种方法有一定的弊端:
1.频繁的复制原函数,然后无脑替换容易出错,例如:
原函数是这个样子:

void func(int & a){···short int b···}
int 无脑替换成 double:void func(double & a){···short double b···}

GG
2.当函数内部逻辑需要修改时,需要对每一个函数都进行相同的修改,这样的工作量大,且容易遗漏。
例如 如果想把swap里面的代码更新一下,则很可能需要把int版本的、char版本的、double版本的都更新一遍 ···没准还要遗漏一两个呢。

于是聪明的人类在总结上述函数的特点,发现这些函数只是参数的类型不同,但是内部的执行逻辑是一样的,,,,所以能不能做到让这些不同的参数的函数共享一套内部逻辑呢?能不能把参数的类型也当做一种变量来嘞?
这种思想就是 类型参数化 (parameterized types) 的核心。
怎么做嘞:
为了使用模板函数,首先需要定义函数模板:
一般形式为:
template < typename T…>
return_type function_name( parameter-list)
{
···
}

原创粉丝点击