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 타입의 특정 인덱스 원소 타입을 컴파일 타임에 조회하는 표준 특질이에요.