# std::tuple_element<std::tuple>

< cpp‎ | utility‎ | tuple

定义于头文件 `<tuple>` |  |
template< std::size_t I, class... Types > class tuple_element< I, tuple<Types...> >; |  | (C++11 起)

提供 tuple 元素类型的编译时带下标访问。

### 成员类型

成员类型 | 定义
type | tuple 的第 `I` 元素的类型，其中 `I` 在 `[0, sizeof...(Types))` 中

### 可能的实现

    template< std::size_t I, class T >
    struct tuple_element;

    // 递归情况
    template< std::size_t I, class Head, class... Tail >
    struct tuple_element<I, std::tuple<Head, Tail...>>
        : std::tuple_element<I-1, std::tuple<Tail...>> { };

    // 基础情况
    template< class Head, class... Tail >
    struct tuple_element<0, std::tuple<Head, Tail...>> {
       using type = Head;
    };

### 示例

    #include <iostream>
    #include <tuple>

    template <class... Args>
    struct type_list
    {
       template <std::size_t N>
       using type = typename std::tuple_element<N, std::tuple<Args...>>::type;
    };

    int main()
    {
       std::cout << std::boolalpha;
       type_list<int, char, bool>::type<2> x = true;
       std::cout << x << '\n';
    }

输出：

    true

### 参阅

结构化绑定 (C++17) | 绑定指定的名字到初始化器的子对象或元组元素
tuple_size (C++11) | 获得元组式类型的元素数 (类模板)
std::get(std::tuple) | 元组式访问指定的元素 (函数模板)