std::tuple_size<std::tuple>
提供: cppreference.com
ヘッダ <tuple> で定義
|
||
template< class T > class tuple_size; /*undefined*/ |
(1) | (C++11以上) |
template< class... Types > class tuple_size< std::tuple<Types...> > |
(2) | (C++11以上) |
ヘッダ <tuple> で定義
|
||
ヘッダ <array> で定義
|
(C++17以上) |
|
ヘッダ <utility> で定義
|
(C++17以上) |
|
ヘッダ <ranges> で定義
|
(C++20以上) |
|
ヘッダ <span> で定義
|
(C++20以上) |
|
template< class T > class tuple_size<const T> |
(3) | (C++11以上) |
template< class T > class tuple_size< volatile T > |
(4) | (C++11以上) (C++20で非推奨) |
template< class T > class tuple_size< const volatile T > |
(5) | (C++11以上) (C++20で非推奨) |
コンパイル時定数式としてのタプルの要素数へのアクセスを提供します。
<tuple> ヘッダのインクルードを通して利用可能となるのに加えて���テンプレート (3-5) はヘッダ <array> または <utility> のいずれかをインクルードしたときも利用可能になります。
std::tuple_size
のすべての特殊化は、何らかの N
に対して std::integral_constant<std::size_t, N>
の基本特性を持つ UnaryTypeTrait を満たします。
cv 修飾版のテンプレート (3-5) は SFINAE-friendly です。 #include <utility> struct X { int a, b; }; const auto [x, y] = X(); // 分解宣言はまず tuple_size<const X> を試みます。 // これは tuple_size<X>::value の使用を試み、それは OK です。 |
(C++17以上) |
目次 |
[編集] ヘルパー変数テンプレート
template< class T > inline constexpr std::size_t tuple_size_v = tuple_size<T>::value; |
(C++17以上) | |
std::integral_constant から継承
メンバ定数
value [静的] |
sizeof...(Types) (パブリック静的メンバ定数) |
メンバ関数
operator std::size_t |
オブジェクトを std::size_t に変換します。 value を返します (パブリックメンバ関数) |
operator() (C++14) |
value を返します (パブリックメンバ関数) |
メンバ型
型 | 定義 |
value_type
|
std::size_t
|
type
|
std::integral_constant<std::size_t, value> |
[編集] 例
Run this code
#include <iostream> #include <tuple> template <class T> void test(T t) { int a[std::tuple_size<T>::value]; // can be used at compile time std::cout << std::tuple_size<T>::value << '\n'; // or at run time } int main() { test(std::make_tuple(1, 2, 3.14)); }
出力:
3
[編集] 関連項目
array のサイズを取得します (クラステンプレートの特殊化) | |
(C++11) |
pair のサイズを取得します (クラステンプレートの特殊化) |
タプルの指定された要素にアクセスします (関数テンプレート) | |
指定された要素の型を取得します (クラステンプレートの特殊化) |