C++模板的认识(一)函数模板

来源:互联网 发布:北京阿里云公司在哪 编辑:程序博客网 时间:2024/06/05 19:38

1 模板函数

模板函数是为了解决同一类参数类型不同函数多次写入重复函数体代码 的问题,通过一个函数模板来实现所以数据类型的该函数,更像是一个参数模板,就好像多态一样,有一个父类,被所以编辑器中类型继承,调用谁就使用哪个子类中的函数。

函数模板的声明形式为:

template<typename 数据类型参数标识符>

<返回类型><函数名>(参数表)

{  

函数体

}  

#include<iostream>  

using namespace std;  

template<typenameT>  

T Add(T x, T y)  

{  

return x+y;  

} 

int main()  

{  

return 0;  

}

其中,template是定义模板函数的关键字;template后面的尖括号不能省略;typename(或class)是声明数据类型参数标识符的关键字,用以说明它后面的标识符是数据类型标识符。这样,在以后定义的这个函数中,凡希望根据实参数据类型来确定数据类型的变量,都可以用数据类型参数标识符来说明,从而使这个变量可以适应不同的数据类型。2模板函数的生成

函数模板只是声明了一个函数的描述即模板,不是一个可以直接执行的函数,只有根据实际情况用实参的数据类型代替类型参数标识符之后,才能产生真正的函数。

关键字typename也可以使用关键字class,这时数据类型参数标识符就可以使用所有的C++数据类型。

①模板函数如果没有显示的实例化,编译器会根据推演参数列表得到合适的实例化函数。

②也可以显示的实例化,Add<int>,这里的Add函数就被显示的生成int型的加法函数。

③当程序在调试的时候每次进入调用加法函数都会走到模板函数内部,但并不是我们每次调用的都是同一个函数。因为每次都会进行推演或显示实例化生成不同的代码,调用内存窗口可以发现不同函数的地址也不相同,所以不是调用同一个函数。

3模板函数的调用规则

C++中,函数模板与同名的非模板函数重载时,应遵循下列调用原则:

• 寻找一个参数完全匹配的函数,若找到就调用它。若参数完全匹配的函数多于一个,则这个调用是一个错误的调用。

• 寻找一个函数模板,若找到就将其实例化生成一个匹配的模板函数并调用它。

• 若上面两条都失败,则使用函数重载的方法,通过类型转换产生参数匹配,若找到就调用它。

•若上面三条都失败,还没有找都匹配的函数,则这个调用是一个错误的调用。

0 0
原创粉丝点击