tuple_element — std::tuple_element

tuple_element — std::tuple_element

std::tuple_element는 **튜플·배열·페어 같은 tuple-like 타입의 특정 인덱스 원소 타입을 알아내는 타입 특질(trait)**이에요. C++11에서 도입됐어요. <tuple>헤더 등에 있어요.

멤버 typedef type으로 I번째 원소 타입을 제공해요.

출처: cppreference

본문

// <tuple>, <array>, <utility> 등
template< std::size_t I, class T >
struct tuple_element;   // 기본 — 사용자 특수화 확장용

I번째 원소의 타입을 tuple_element<I, T>::type으로 제공해요.

사용 예

#include <tuple>
#include <array>
#include <utility>
#include <type_traits>

// tuple
std::tuple<int, std::string, double> t;
using T1 = std::tuple_element_t<0, decltype(t)>;   // int
using T2 = std::tuple_element_t<2, decltype(t)>;   // double

// pair
using P = std::pair<int, double>;
using PE = std::tuple_element_t<1, P>;   // double

// array
using A = std::array<float, 4>;
using AE = std::tuple_element_t<3, A>;   // float

_t 변형

template<size_t I, class T>
using tuple_element_t = typename tuple_element<I, T>::type;

활용 — 제네릭 코드

decltype(std::get<I>(t))처럼 쓰지 않고, 튜플의 특정 위치 타입을 직접 얻고 싶을 때 사용해요.

template<typename Tuple>
using first_t = std::tuple_element_t<0, Tuple>;
// first_t<std::tuple<int,string>> == int

std::tuple_element는 tuple-like 타입의 특정 인덱스 원소 타입을 컴파일 타임에 조회하는 표준 특질이에요.

더 알아보기 (Learn more)

cppreference