std::tuple_element<std::tuple>_C++中文网

定义于头文件 <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>

(C++17 起)

定义于头文件 <utility>

(C++17 起)

定义于头文件 <ranges>

(C++20 起)

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';
}

输出:

参阅