std::make_tuple
Материал из cppreference.com
Определено в заголовочном файле <tuple> | ||
template<class... Types> std::tuple<VTypes...> make_tuple( Types&&... args); | (начиная с C++11) (constexpr since C++14) | |
Создаёт объект tuple, выводя целевой тип из типов аргументов.
Для каждого Ti
в Types...
соответствующий тип Vi
в VTypes...
равен std::decay<Ti>::type, если только применение std::decay не приводит к std::reference_wrapper<X> для некоторого типа X
, где выведенный тип X&
.
Содержание |
[править]Параметры
args | — | ноль или более аргументов для создания кортежа |
[править]Возвращаемое значение
Объект std::tuple, содержащий заданные значения, созданный, как если бы std::tuple<VTypes...>(std::forward<Types>(t)...).
[править]Возможная реализация
template<class T>struct unwrap_refwrapper {using type = T;}; template<class T>struct unwrap_refwrapper<std::reference_wrapper<T>>{using type = T&;}; template<class T>using unwrap_decay_t =typename unwrap_refwrapper<typenamestd::decay<T>::type>::type;// или используйте std::unwrap_ref_decay_t (начиная с C++20) template<class... Types>constexpr// начиная с C++14std::tuple<unwrap_decay_t<Types>...> make_tuple(Types&&... args){returnstd::tuple<unwrap_decay_t<Types>...>(std::forward<Types>(args)...);} |
[править]Пример
Запустить этот код
#include <iostream>#include <tuple>#include <functional> std::tuple<int, int> f()// эта функция возвращает несколько значений{int x =5;return std::make_tuple(x, 7);// возвращает {x,7}; в C++17} int main(){// неоднородное создание кортежаint n =1;auto t = std::make_tuple(10, "Тест", 3.14, std::ref(n), n); n =7;std::cout<<"Значение t равно ("<<std::get<0>(t)<<", "<<std::get<1>(t)<<", "<<std::get<2>(t)<<", "<<std::get<3>(t)<<", "<<std::get<4>(t)<<")\n"; // функция, возвращающая несколько значенийint a, b;std::tie(a, b)= f();std::cout<< a <<' '<< b <<'\n';}
Вывод:
Значение t равно (10, Тест, 3.14, 7, 1) 5 7
[править]Смотрите также
создаёт tuple левосторонних ссылок или распаковывает кортеж на отдельные объекты (шаблон функции) | |
(C++11) | создаёт tuple пересылалаемых ссылок(шаблон функции) |
(C++11) | создаёт tuple , объединяя любое количество кортежей (шаблон функции) |
(C++17) | вызывает функцию с кортежем аргументов (шаблон функции) |