C++11新特性(72)-标准库tuple模板
从本文开始进入C++标准库特殊设施部分,所谓特殊设施,应该就是C++Primer作者从C++标准库中选出的,认为值得单独介绍的部分。首先介绍tuple模板。
什么是tuple
作者英语一般,在写文章之前首先查了一下tuple的意思,百度翻译给出的结果是:元组,数组。说实话没懂。再查英语词典,给出的解释是:
a structure of data that has several parts。
这个好理解,就是包含多个部分的数据结构。
初始化
tuple初始化有几种方式,首先是默认初始化。这种情况下,tuple的每个成员都被默认初始化。
也可以在初始化时指定各个成员的值。下面代码中第一种方式使用的是tuple的构造函数,第二种方式使用的是初始化列表。
使用make_tuple函数配合auto类型指示符,还可以更简洁地初始化tuple。
访问tuple成员
对象建立之后,就可以访问它的各个成员了。访问的形式比较特别,是一个函数模板。也许不大习惯代码的形式,其实只要理解以下几点即可。
-
函数参数是tuple对象。
-
模板参数是成员的索引,而且必须是const expression类型。
-
虽然模板参数还有一个是tuple对象的类型,但由于编译器可以通过tuple对象推断,实际上并不需要输入。
代码如下:
输出结果参照注释。
取得成员的数量和类型
如果tuple数据的生成者和使用者不在一个模块中,可能就需要对数据进行某种检查,这时就很可能希望知道成员的数量或者类型。直接上代码。
从上述代码可以看到:
1.tuple_size,tuple_element的输入都需要tuple对象的类型,而不是对象本身。
2.取得成员的类型可以使用tuple_element,也可以使用decltype结合get取得。
作者观点
相信每个程序员都会遇到不想给变量命名的情况,要不然代码中也不会有那么多temp。当你不想给结构体命名的时候,可以选择tuple,这时连结构体成员都不需要命名。
觉得本文有帮助?请分享给更多人。
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】