std::tuple_cat
来自 cppreference.com
定义在头文件 <tuple> 中 |
||
template< class... Tuples > std::tuple</* CTypes */...> tuple_cat( Tuples&&... args ); |
(自 C++11) (直到 C++14) |
|
template< class... Tuples > constexpr std::tuple</* CTypes */...> tuple_cat( Tuples&&... args ); |
(自 C++14) (直到 C++23) |
|
template< tuple-like... Tuples > constexpr std::tuple</* CTypes */...> tuple_cat( Tuples&&... args ); |
(自 C++23) | |
构造一个元组,它是 args 中所有元组的连接。返回的元组的元素类型 /* CTypes */ 是通过按顺序连接所有 std::tuple(直到 C++23)tuple-like
(自 C++23) 类型中元素类型包形成的。
如果 std::decay_t<Tuples>... 中的任何类型不是 std::tuple 的特化,则行为未定义。但是,实现可以选择支持遵循元组式协议的类型(如 std::array 和 std::pair)。 |
(直到 C++23) |
类型 std::decay_t<Tuples>... 被限制为元组式,即其中每个类型都必须是 std::tuple 的特化或其他类型(如 std::array 和 std::pair),它们对 |
(自 C++23) |
如果 /* CTypes */ 中的任何类型不能从 args 中连接的元素序列的对应元素类型构造,则行为未定义(直到 C++23)则程序是非法的(自 C++23).
内容 |
[编辑] 参数
args | - | 要连接的零个或多个元组 |
[编辑] 返回值
一个由所有参数元组的所有元素组成的 std::tuple 对象,这些元素是从 std::get<j>(std::forward<Ti>(arg)) 构造的。
[编辑] 示例
运行此代码
#include <iostream> #include <string> #include <tuple> // helper function to print a tuple of any size template<class Tuple, std::size_t N> struct TuplePrinter { static void print(const Tuple& t) { TuplePrinter<Tuple, N - 1>::print(t); std::cout << ", " << std::get<N-1>(t); } }; template<class Tuple> struct TuplePrinter<Tuple, 1> { static void print(const Tuple& t) { std::cout << std::get<0>(t); } }; template<typename... Args, std::enable_if_t<sizeof...(Args) == 0, int> = 0> void print(const std::tuple<Args...>& t) { std::cout << "()\n"; } template<typename... Args, std::enable_if_t<sizeof...(Args) != 0, int> = 0> void print(const std::tuple<Args...>& t) { std::cout << "("; TuplePrinter<decltype(t), sizeof...(Args)>::print(t); std::cout << ")\n"; } // end helper function int main() { std::tuple<int, std::string, float> t1(10, "Test", 3.14); int n = 7; auto t2 = std::tuple_cat(t1, std::make_tuple("Foo", "bar"), t1, std::tie(n)); n = 42; print(t2); }
输出
(10, Test, 3.14, Foo, bar, 10, Test, 3.14, 42)
[编辑] 另请参阅
(C++11) |
创建一个由参数类型定义的 tuple 对象(函数模板) |
(C++11) |
创建一个左值引用的 tuple 或将一个元组解包为单独的对象 (函数模板) |
(C++11) |
创建一个 转发引用 的 tuple (函数模板) |