C++11新特性(64)- 模板函数与返回类型后置

渐进式说明

最简单的情况

先考虑我们有一个函数,功能是从一个整数数组中取得其中一个元素。

代码很简单,但这只是一个引子。本文的所有示例代码都不考虑下标越界的情况,这样可以更加突出主题。

 

适用于其他类型

如果希望这个函数可以适应更多类型的数组,只要引入模板即可。

也没难多少。

 

更加通用

如果除了数据类型可以扩展之外,还希望可以将其应用于vector的话,就没有那么容易了。例如下面的代码是不能通过编译的。

不能通过编译是由于解引用不是数据类型,而是操作。如果模板变量为T,而返回值为T*的话是可以正常编译的。

 

解决这个问题的方法是使用前面讲到过的C++11新特性:返回值类型后置和decltype。代码如下:

由于decltype需要取得it解引用的类型,所以取得返回值类型的操作必须在it出现之后,即所谓的返回值类型后置。有了这个模板函数之后,下面的3中情况,代码都能够正确无误地执行:

 

其他的情况

这种做法不仅适用与解引用的场景,其他可以通过参数取得返回值类型的情况也有效。例如从下面的DblPoint和IntPoint结构体取得成员x的情况:

可以这样定义模板函数:

作者提示

 

今天提到的返回值类型后置和decltype两个知识点,可以参考下面的文章:

 

C++11新特性(7)- decltype修饰符

C++11新特性(16)- 返回类型后置

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值