std::get(std::tuple)
Материал из cppreference.com
Определено в заголовочном файле <tuple> | ||
template<std::size_t I, class... Types> typenamestd::tuple_element<I, std::tuple<Types...>>::type& | (1) | (начиная с C++11) (constexpr начиная с C++14) |
template<std::size_t I, class... Types> typenamestd::tuple_element<I, std::tuple<Types...>>::type&& | (2) | (начиная с C++11) (constexpr начиная с C++14) |
template<std::size_t I, class... Types> consttypenamestd::tuple_element<I, std::tuple<Types...>>::type& | (3) | (начиная с C++11) (constexpr начиная с C++14) |
template<std::size_t I, class... Types> consttypenamestd::tuple_element<I, std::tuple<Types...>>::type&& | (4) | (начиная с C++11) (constexpr начиная с C++14) |
template<class T, class... Types> constexpr T& get(std::tuple<Types...>& t )noexcept; | (5) | (начиная с C++14) |
template<class T, class... Types> constexpr T&& get(std::tuple<Types...>&& t )noexcept; | (6) | (начиная с C++14) |
template<class T, class... Types> constexprconst T& get(conststd::tuple<Types...>& t )noexcept; | (7) | (начиная с C++14) |
template<class T, class... Types> constexprconst T&& get(conststd::tuple<Types...>&& t )noexcept; | (8) | (начиная с C++14) |
1-4) Извлекает
I
ый элемент из tuple. I
должно быть целым числом в диапазоне [
0,
sizeof...(Types))
.5-8) Извлекает элемент tuple t типа
T
. Не удаётся скомпилировать, если tuple не содержит ровно один элемент этого типа.Содержание |
[править]Параметры
t | — | tuple, содержимое которого нужно извлечь |
[править]Возвращаемое значение
Ссылка на выбранный элемент t.
[править]Примечание
Макрос Тестирования функциональности | Значение | Стандарт | Функциональность |
---|---|---|---|
__cpp_lib_tuples_by_type | 201304L | (C++14) | Адресация кортежей по типу |
[править]Пример
Запустить этот код
#include <iostream>#include <string>#include <tuple> int main(){auto t =std::make_tuple(1, "Foo", 3.14);// Доступ на основе индексаstd::cout<<"("<<std::get<0>(t)<<", "<<std::get<1>(t)<<", "<<std::get<2>(t)<<")\n";// Доступ на основе типов (C++14 или новее)std::cout<<"("<<std::get<int>(t)<<", "<<std::get<constchar*>(t)<<", "<<std::get<double>(t)<<")\n";// Примечание: std::tie и структурные привязки также могут// использоваться для декомпозиции tuple.}
Вывод:
(1, Foo, 3.14) (1, Foo, 3.14)
[править]Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
LWG 2485 | C++11 (по индексу) C++14 (по типу) | нет перегрузок для const tuple&& | перегрузки добавлены |
[править]Смотрите также
Структурные привязки(C++17) | привязывает указанные имена к подобъектам или элементам кортежа инициализатора |
(C++11) | предоставляет доступ к элементу array (шаблон функции) |
(C++11) | доступ к элементу пары (шаблон функции) |
(C++17) | читает значение variant по заданному индексу или типу (если тип уникален), генерирует исключение при ошибке (шаблон функции) |
(C++20) | получает итератор или ограничитель из std::ranges::subrange (шаблон функции) |