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<typename std::decay<T>::type>::type; // или используйте std::unwrap_ref_decay_t (начиная с C++20) template <class... Types> constexpr // начиная с C++14 std::tuple<unwrap_decay_t<Types>...> make_tuple(Types&&... args) { return std::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) |
вызывает функцию с кортежем аргументов (шаблон функции) |