Namespaces
Variants

std:: get (std::tuple)

From cppreference.net
Utilities library
헤더에 정의됨 <tuple>
template < std:: size_t I, class ... Types >

typename std:: tuple_element < I, std:: tuple < Types... >> :: type &

get ( std:: tuple < Types... > & t ) noexcept ;
(1) (C++11부터)
(C++14부터 constexpr)
template < std:: size_t I, class ... Types >

typename std:: tuple_element < I, std:: tuple < Types... >> :: type &&

get ( std:: tuple < Types... > && t ) noexcept ;
(2) (C++11부터)
(C++14부터 constexpr)
template < std:: size_t I, class ... Types >

const typename std:: tuple_element < I, std:: tuple < Types... >> :: type &

get ( const std:: tuple < Types... > & t ) noexcept ;
(3) (C++11부터)
(C++14부터 constexpr)
template < std:: size_t I, class ... Types >

const typename std:: tuple_element < I, std:: tuple < Types... >> :: type &&

get ( const std:: tuple < Types... > && t ) noexcept ;
(4) (C++11부터)
(C++14부터 constexpr)
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 이후)
1-4) 튜플에서 I 번째 요소를 추출합니다. I [ 0 , sizeof... ( Types ) ) 범위의 정수 값이어야 합니다.
5-8) 튜플의 요소 중 타입이 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 ) )

참고 항목

array 의 요소에 접근합니다
(function template)
pair 의 요소에 접근합니다
(function template)
인덱스나 타입(타입이 고유한 경우)을 통해 variant의 값을 읽으며, 오류 시 예외를 발생시킵니다
(function template)
std::ranges::subrange 에서 반복자나 센티널을 얻습니다
(function template)
std::complex 에서 실수부나 허수부에 대한 참조를 얻습니다
(function template)
(C++11)
lvalue 참조의 tuple 을 생성하거나 튜플을 개별 객체로 풀어냅니다
(function template)
Structured binding (C++17) 지정된 이름들을 초기화자의 하위 객체나 튜플 요소에 바인딩합니다