码迷,mamicode.com
首页 > 其他好文 > 详细

重载(下)——函数模板

时间:2015-04-08 00:47:19      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

函数(上)里介绍了函数的重载,但是为每个需要重载的函数编写多个函数实体是尤为麻烦的。这里可以用到一个名为函数模板的的形式来优化代码。

函数模板形式:

技术分享 关键字 class把T标识为一个类型

?

技术分享template < class T > T larger(T a,Tb)

?

关键字template把这段代码标识为模板

?

然后就可以在其他函数中实例化这个模板。一般来说,编译器会推断出函数需要实例化哪个版本的函数。但是有时也会推断错误,特别是有多个模板参数的时候,且容易造成内存占用过大。

所以在调用的时候可以显示的指定模板参数

Larger<long>(value1,value2)<<endl;

这可以帮助编译器做出理想的决策,也可以转换不同类型的参数,适应于函数模板。

模板参数是引用类型的说明:

假如用地址参数调用函数large()——*larger(&a,&b),编译器会创建一个模板参数是long*的函数版本,这个函数的原型如下:long* larger(long*,long*)

但是这样的函数题生成的函数如下所示:

long* larger(long* a,long* b)

{

return a>b?a:b

};

这是在比较地址,而不是值。

所以我们要重新定义一个模板的说明

template<> long* larger<long*>(long *a,long* b)
{

return *a>*b?a:b;

}

带有多个参数的模板:用于解决函数的参数类型可能与返回类型不同的问题

?

?

?

?

——内容来自Horton的c++入门经典

重载(下)——函数模板

标签:

原文地址:http://www.cnblogs.com/Daringoo/p/4400952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!