std:: get (std::tuple)
|
Определено в заголовочном файле
<tuple>
|
||
|
template
<
std::
size_t
I,
class
...
Types
>
typename
std::
tuple_element
<
I,
std::
tuple
<
Types...
>>
::
type
&
|
(1) |
(начиная с C++11)
(constexpr начиная с C++14) |
|
template
<
std::
size_t
I,
class
...
Types
>
typename
std::
tuple_element
<
I,
std::
tuple
<
Types...
>>
::
type
&&
|
(2) |
(начиная с C++11)
(constexpr начиная с C++14) |
|
template
<
std::
size_t
I,
class
...
Types
>
const
typename
std::
tuple_element
<
I,
std::
tuple
<
Types...
>>
::
type
&
|
(3) |
(начиная с C++11)
(constexpr начиная с C++14) |
|
template
<
std::
size_t
I,
class
...
Types
>
const
typename
std::
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
>
constexpr const T & get ( const std:: tuple < Types... > & t ) noexcept ; |
(7) | (начиная с C++14) |
|
template
<
class
T,
class
...
Types
>
constexpr const T && get ( const std:: tuple < Types... > && t ) noexcept ; |
(8) | (начиная с C++14) |
[
0
,
sizeof...
(
Types
)
)
.
T
. Компиляция завершится ошибкой, если кортеж не содержит ровно один элемент этого типа.
Содержание |
Параметры
| t | - | кортеж, содержимое которого нужно извлечь |
Возвращаемое значение
Ссылка на выбранный элемент t .
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_tuples_by_type
|
201304L
|
(C++14) | Обращение к кортежам по типу ( 5-8 ) |
Пример
#include <cassert> #include <iostream> #include <string> #include <tuple> int main() { auto x = std::make_tuple(1, "Foo", 3.14); // Доступ по индексу std::cout << "( " << std::get<0>(x) << ", " << std::get<1>(x) << ", " << std::get<2>(x) << " )\n"; // Доступ по типу (начиная с C++14) std::cout << "( " << std::get<int>(x) << ", " << std::get<const char*>(x) << ", " << std::get<double>(x) << " )\n"; const std::tuple<int, const int, double, double> y(1, 2, 6.9, 9.6); const int& i1 = std::get<int>(y); // OK: не неоднозначно assert(i1 == 1); const int& i2 = std::get<const int>(y); // OK: не неоднозначно assert(i2 == 2); // const double& d = std::get<double>(y); // Ошибка: некорректно (неоднозначно) // Примечание: std::tie и структурированные привязки могут быть // использованы для распаковки кортежа в отдельные объекты. }
Вывод:
( 1, Foo, 3.14 ) ( 1, Foo, 3.14 )
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 2485 |
C++11 (по индексу)
C++14 (по типу) |
отсутствуют перегрузки для const tuple && | добавлены эти перегрузки ( ( 4 ) и ( 8 ) ) |
Смотрите также
|
(C++11)
|
получает доступ к элементу
array
(шаблон функции) |
|
(C++11)
|
получает доступ к элементу
pair
(шаблон функции) |
|
(C++17)
|
читает значение variant по индексу или типу (если тип уникален), генерирует исключение при ошибке
(шаблон функции) |
|
(C++20)
|
получает итератор или sentinel из
std::ranges::subrange
(шаблон функции) |
|
(C++26)
|
получает ссылку на действительную или мнимую часть из
std::complex
(шаблон функции) |
|
(C++11)
|
создает
tuple
из ссылок на lvalue или распаковывает tuple в отдельные объекты
(шаблон функции) |
| Structured binding (C++17) | связывает указанные имена с подобъектами или элементами tuple инициализатора |