Пространства имён
Варианты
Действия

std::tuple_cat

Материал из cppreference.com
< cpp‎ | utility‎ | tuple
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
Определено в заголовочном файле <tuple>
template<class... Tuples>
std::tuple</* CTypes */...> tuple_cat( Tuples&&... args);
(начиная с C++11)
(до C++14)
template<class... Tuples>
constexprstd::tuple</* CTypes */...> tuple_cat( Tuples&&... args);
(начиная с C++14)
(до C++23)
template< tuple-like... Tuples>
constexprstd::tuple</* CTypes */...> tuple_cat( Tuples&&... args);
(начиная с C++23)

Создаёт кортеж, который представляет собой конкатенацию всех кортежей в args. Типы элементов /* CTypes */ возвращаемого кортежа формируются путём объединения пакетов типов элементов всех std::tuple(до C++23)tuple-like(начиная с C++23) типов в Tuples по порядку.

Поведение не определено, если какой-либо тип в std::decay_t<Tuples>... не является специализацией std::tuple. Однако реализация может выбрать поддержку типов (таких как std::array и std::pair), которые следуют кортежеподобному протоколу.

(до C++23)

Типы std::decay_t<Tuples>... ограничены кортежем, т.е. каждый тип в них должен быть специализацией std::tuple или другого типа (например, std::array и std::pair), которые моделируют tuple-like.

(начиная с C++23)

Если какой-либо тип в /* CTypes */ не может быть создан из типа соответствующего элемента в последовательности элементов, объединённых из args, поведение не определено(до C++23)программа некорректна(начиная с C++23).

Содержание

[править]Параметры

args ноль или более кортежей для конкатенации

[править]Возвращаемое значение

Объект std::tuple, состоящий из всех элементов всех кортежей аргументов, созданных из std::get<j>(std::forward<Ti>(arg)) для каждого отдельного элемента.

[править]Пример

#include <iostream>#include <string>#include <tuple>   // вспомогательная функция для печати кортежа любого размераtemplate<class Tuple, std::size_t N>struct TuplePrinter {staticvoid print(const Tuple& t){ TuplePrinter<Tuple, N-1>::print(t);std::cout<<", "<<std::get<N-1>(t);}};   template<class Tuple>struct TuplePrinter<Tuple, 1>{staticvoid print(const Tuple& t){std::cout<<std::get<0>(t);}};   template<typename... Args, std::enable_if_t<sizeof...(Args)==0, int>=0>void print(conststd::tuple<Args...>& t){std::cout<<"()\n";}   template<typename... Args, std::enable_if_t<sizeof...(Args)!=0, int>=0>void print(conststd::tuple<Args...>& t){std::cout<<"("; TuplePrinter<decltype(t), sizeof...(Args)>::print(t);std::cout<<")\n";}// конец вспомогательной функции   int main(){std::tuple<int, std::string, float> t1(10, "Тест", 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, Тест, 3.14, Foo, bar, 10, Тест, 3.14, 42)

[править]Смотрите также

(C++11)
создаёт объект tuple типа, определённого типами аргументов
(шаблон функции)[править]
создаёт tuple левосторонних ссылок или распаковывает кортеж на отдельные объекты
(шаблон функции)[править]
создаёт tupleпересылалаемых ссылок
(шаблон функции)[править]
close