- tuple[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp11[meta cpp]
namespace std {
template <class... Tuples>
tuple<Ctypes ...> tuple_cat(Tuples&&...); // C++11
template <class... Tuples>
constexpr tuple<Ctypes ...> tuple_cat(Tuples&&...); // C++14
template <tuple-like... Tuples>
constexpr tuple<Ctypes ...> tuple_cat(Tuples&&... tpls); // C++23
}
- tuple[link tuple.md]
- tuple-like[link tuple-like.md]
複数のtuple
を繋ぎ合わせ、1つのtuple
にする。C++23 からはtuple-like
である型を対象に繋ぎ合わせることが可能。
- C++20まで :
Tuples...
の全ての型がstd::tuple
<Args...>
であること。Tuples...
の各型が左辺値参照であればその要素型Args...
の各型はコピー構築可能、そうでなければムーブ構築可能であること。
- C++23から :
- 本関数の戻り値の
tuple
のテンプレートパラメーターパックをCtypes
とし、Ctypes
の全ての要素について、引数tpls
において対応する要素の型から構築可能であること。 - より厳密には、次のように定義を行い、
(
is_constructible_v
<CTypes, decltype(celems)> && ...) == true
であること。n
をsizeof...(Tuples)
とし、i
を範囲[0, n)
における整数値とするT(i)
をTuples
のi
番目とするU(i)
をremove_cvref_t<T(i)>
とするtp(i)
をパラメータパックtpls
のi
番目とするS(i)
をtuple_size_v<U(i)>
とするE(i,k)
をtuple_element_t<k, U(i)>
とするe(i,k)
をget<k>(
std::forward
<T(i)>(tp(i)))
とするElems(i)
を型パラメータパックE(i,0), ..., E(i,Si-1)
とするelems(i)
をパラメータパックe(i,0), ..., e(i,Si-1)
とするCtypes
を型パラメーターパックElems(0)..., Elems(1)..., ..., Elems(n-1)...
とするcelems
をパラメーターパックelems(0)..., elems(1), ..., elems(n-1)...
とする
- 本関数の戻り値の
Tuples...
の全てのtuple
型の要素型全てを取り出し、std::
forward
<T>(x)
して構築される1つのtuple
オブジェクト。
実装によっては、Tuples...
パラメータパックに含めることのできる型として、他のタプルライクな型(pair
やarray
のような)を追加的にサポートする可能性がある。(C++23からはtuple-like
を満たす型をサポートする。)
#include <iostream>
#include <tuple>
#include <string>
int main()
{
std::tuple<int, std::string> t1(1, "Hello");
std::tuple<char, double> t2('a', 3.14);
std::tuple<std::string> t3("World");
// 3つのtupleを繋ぎ合わせる
std::tuple<int, std::string, char, double, std::string> result =
std::tuple_cat(t1, t2, t3);
std::cout << std::get<0>(result) << std::endl;
std::cout << std::get<1>(result) << std::endl;
std::cout << std::get<2>(result) << std::endl;
std::cout << std::get<3>(result) << std::endl;
std::cout << std::get<4>(result) << std::endl;
}
- std::tuple_cat[color ff0000]
- std::get[link tuple/get.md]
1
Hello
a
3.14
World
- C++11
- Clang: ??
- GCC: 4.6.1 [mark verified]
- ICC: ??
- Visual C++: ??