std::make_from_tuple
Определено в заголовочном файле <tuple>
|
||
template< class T, class Tuple > constexpr T make_from_tuple( Tuple&& t ); |
(начиная с C++17) (до C++23) |
|
template< class T, tuple-like Tuple > constexpr T make_from_tuple( Tuple&& t ); |
(начиная с C++23) | |
Создаёт объект типа T
, используя элементы кортежа t в качестве аргументов конструктора.
Учитывая функцию только для описания /*make-from-tuple-impl*/, определённую следующим образом:
template<class T,
tuple-like
Tuple, std::size_t... I> // нет ограничений на Tuple до C++23
constexpr T /*make-from-tuple-impl*/(Tuple&& t, std::index_sequence<I...>)
{
return T(std::get<I>(std::forward<Tuple>(t))...);
}
Эффект эквивалентен:
return /*make-from-tuple-impl*/<T>(
std::forward<Tuple>(t),
std::make_index_sequence<std::tuple_size_v<std::remove_reference_t<Tuple>>>{}
);
.
Если
|
(начиная с C++23) |
- std::is_constructible_v<T, decltype(std::get<I>(std::declval<Tuple>()))...> равно false,
программа некорректна.
Содержание |
[править] Параметры
t | — | кортеж, элементы которого будут использоваться в качестве аргументов конструктора T
|
[править] Возвращаемое значение
Созданный объект T
или ссылка.
[править] Примечание
|
(до C++23) |
|
(начиная с C++23) |
Из-за гарантированного пропуска копирования, T
не обязательно должен быть перемещаемым.
Макрос Тестирования функциональности | Значение | Стандарт | Функциональность |
---|---|---|---|
__cpp_lib_make_from_tuple |
201606L | (C++17) | std::make_from_tuple
|
[править] Пример
#include <iostream> #include <tuple> struct Foo { Foo(int first, float second, int third) { std::cout << first << ", " << second << ", " << third << '\n'; } }; int main() { auto tuple =