std::tuple_element<std::tuple>_C++中文网
| 定义于头文件 |
||
| template< std::size_t I, class T > |
(1) | (C++11 起) |
| template< std::size_t I, class... Types > |
(2) | (C++11 起) |
| 定义于头文件 |
||
| 定义于头文件 |
(C++17 起) |
|
| 定义于头文件 |
(C++17 起) |
|
| 定义于头文件 |
(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 起) |
| template< std::size_t I, class T > class tuple_element< I, const volatile T > { |
(5) | (C++11 起) |
提供 tuple 元素类型的编译时带下标访问。
成员类型
| 成员类型 | 定义 |
| type | tuple 的第 I 元素的类型,其中 I 在 [0, sizeof...(Types)) 中
|
辅助类
| template <std::size_t I, class T> |
(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'; }
输出: