std::tuple_element<std::tuple>

来自cppreference.com
< cpp‎ | utility‎ | tuple
定义于头文件 <tuple>
template< std::size_t I, class T >
class tuple_element; /* undefined */
(1) (C++11 起)
template< std::size_t I, class... Types >
class tuple_element< I, tuple<Types...> >;
(2) (C++11 起)
定义于头文件 <tuple>
定义于头文件 <array>
定义于头文件 <utility>
(C++17 起)
(C++17 起)
template< std::size_t I, class T >

class tuple_element< I, const T > {
  typedef typename
      std::add_const<typename std::tuple_element<I, T>::type>::type type;

};
(3) (C++11 起)
template< std::size_t I, class T >

class tuple_element< I, volatile T > {
  typedef typename
      std::add_volatile<typename std::tuple_element<I, T>::type>::type type;

};
(4) (C++11 起)
template< std::size_t I, class T >

class tuple_element< I, const volatile T > {
  typedef typename
      std::add_cv<typename std::tuple_element<I, T>::type>::type type;

};
(5) (C++11 起)

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

目录

[编辑] 成员类型

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

[编辑] 帮助类

template <std::size_t I, class T>
using tuple_element_t = typename tuple_element<I, T>::type;
(C++14 起)

[编辑] 可能的实现

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...>> {
   typedef Head type;
};

[编辑] 示例

#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

[编辑] 参阅

获得array元素的类型
(类模板特化) [编辑]
获得pair中元素的类型
(类模板特化) [编辑]