函数模板
<tuple>

std::tuple_cat

template <class... Tuples>  tuple<CTypes...> tuple_cat (Tuples&&... tpls);
连接元组
构造一个合适的tuple类型的对象,该对象包含tpls中所有元组的元素,并保持原有顺序。

返回的tuple的每个元素都通过复制/移动构造(如同使用forward传递一样)。

参数

tpls
逗号分隔的元组对象列表。它们可以是不同类型。

返回值

一个tuple对象,类型合适,用于容纳args

返回对象的类型(tuple<CTypes...>)是包含Tuples中所有扩展类型的有序序列的tuple类型。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// tuple_cat example
#include <iostream>     // std::cout
#include <utility>      // std::pair
#include <string>       // std::string
#include <tuple>        // std::tuple, std::tuple_cat, std::get

int main ()
{

  std::tuple<float,std::string> mytuple (3.14,"pi");
  std::pair<int,char> mypair (10,'a');

  auto myauto = std::tuple_cat ( mytuple, std::tuple<int,char>(mypair) );

  std::cout << "myauto contains: " << '\n';
  std::cout << std::get<0>(myauto) << '\n';
  std::cout << std::get<1>(myauto) << '\n';
  std::cout << std::get<2>(myauto) << '\n';
  std::cout << std::get<3>(myauto) << '\n';

  return 0;
}

输出
myauto contains:
3.14
pi
10
a


数据竞争

会访问tpls的元素,如果其中任何一个元素的类型支持该函数调用的*移动语义*,则它将被修改。

异常安全

如果tuple元素的任何单个构造都不可能抛出异常,则该操作永远不会抛出异常(无异常保证)。
否则,如果任何tpls对象不是*左值*,并且结果tuple中的至少一个类型可以从它通过*移动语义*构造,那么在异常发生时,操作可能会将任意数量的此类对象置于无效状态(无保证)。
否则,该函数仅涉及复制,并且该函数不产生副作用(强保证)。

另见