std::tuple_element<std::tuple>

来自cppreference.com
< cpp‎ | utility‎ | tuple
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)
 
std::tuple
成员函数
非成员函数
(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20)
推导指引(C++17)
辅助概念
(C++23)
辅助类
tuple_element
 
在标头 <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) 绑定指定的名字到初始化器的子对象或元组元素
获得元组式类型的元素数
(类模板)
元组式访问指定的元素
(函数模板)