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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/craftsman1970/article/details/81949960

渐进式说明

最简单的情况

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

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

适用于其他类型

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

也没难多少。

更加通用

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

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

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

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

其他的情况

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

可以这样定义模板函数:

作者提示

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/craftsman1970/article/details/81949960