std::tuple_element<std::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>
|
(C++17 起) |
|
定义于头文件 <utility>
|
(C++17 起) |
|
定义于头文件 <ranges>
|
(C++20 起) |
|
template< std::size_t I, class T > class tuple_element< I, const T > { |
(3) | (C++11 起) |
template< std::size_t I, class T > class tuple_element< I, volatile T > { |
(4) | (C++11 起) (C++20 中弃用) |
template< std::size_t I, class T > class tuple_element< I, const volatile T > { |
(5) | (C++11 起) (C++20 中弃用) |
提供 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 中元素的类型 (类模板特化) |