std::tuple_element<std::tuple>
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <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以上) |
|
| ヘッダ <span> で定義
|
(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以上) (C++20で非推奨) |
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以上) (C++20で非推奨) |
タプルの要素型へのコンパイル時インデックスアクセスを提供します。
メンバ型
| メンバ型 | 定義 |
| type | タプルの I 番目の要素、ただし I は [0, sizeof...(Types)) の範囲内
|
ヘルパー型
<tbody> </tbody> 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;
// recursive case
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...>> { };
// base case
template< class Head, class... Tail >
struct tuple_element<0, std::tuple<Head, Tail...>> {
typedef Head type;
};
|
例
Run this code
#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 の要素の型を取得します (クラステンプレートの特殊化) |