从本文开始进入C++标准库特殊设施部分,所谓特殊设施,应该就是C++Primer作者从C++标准库中选出的,认为值得单独介绍的部分。首先介绍tuple模板。

什么是tuple

作者英语一般,在写文章之前首先查了一下tuple的意思,百度翻译给出的结果是:元组,数组。说实话没懂。再查英语词典,给出的解释是:

structure of data that has several parts。

这个好理解,就是包含多个部分的数据结构

初始化

tuple初始化有几种方式,首先是默认初始化。这种情况下,tuple的每个成员都被默认初始化。

C++11新特性(72)-标准库tuple模板_数据

 

也可以在初始化时指定各个成员的值。下面代码中第一种方式使用的是tuple的构造函数,第二种方式使用的是初始化列表。

C++11新特性(72)-标准库tuple模板_c++_02

使用make_tuple函数配合auto类型指示符,还可以更简洁地初始化tuple。

C++11新特性(72)-标准库tuple模板_C_03

 

访问tuple成员

对象建立之后,就可以访问它的各个成员了。访问的形式比较特别,是一个函数模板。也许不大习惯代码的形式,其实只要理解以下几点即可。

  1. 函数参数是tuple对象。
  2. 模板参数是成员的索引,而且必须是const expression类型。
  3. 虽然模板参数还有一个是tuple对象的类型,但由于编译器可以通过tuple对象推断,实际上并不需要输入。

代码如下:

C++11新特性(72)-标准库tuple模板_C_04

输出结果参照注释。

 

取得成员的数量和类型

如果tuple数据的生成者和使用者不在一个模块中,可能就需要对数据进行某种检查,这时就很可能希望知道成员的数量或者类型。直接上代码。

C++11新特性(72)-标准库tuple模板_数据_05

从上述代码可以看到:

1.tuple_size,tuple_element的输入都需要tuple对象的类型,而不是对象本身。

2.取得成员的类型可以使用tuple_element,也可以使用decltype结合get取得。

 

作者观点

相信每个程序员都会遇到不想给变量命名的情况,要不然代码中也不会有那么多temp。当你不想给结构体命名的时候,可以选择tuple,这时连结构体成员都不需要命名。

 

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

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

C++11新特性(72)-标准库tuple模板_初始化_06