std::tuple_size<std::ranges::subrange>
From cppreference.com
| ヘッダ <ranges> で定義 |
||
| template< class I, class S, ranges::subrange_kind K > struct tuple_size<ranges::subrange<I, S, K>> |
(C++20以降) | |
std::ranges::subrange に対する std::tuple_size の部分特殊化は、タプルライクな構文を使用して、subrange のコンポーネント数(常に 2)をコンパイル時に取得する方法を提供します。これは構造化束縛のサポートのために提供されます。
目次 |
std::integral_constant から継承
メンバ定数
| value [static] |
定数値 2 (公開静的メンバ定数) |
メンバ関数
| operator std::size_t |
オブジェクトを std::size_t に変換し、value を返します。 (public member function) |
| operator() (C++14) |
value を返します。 (public member function) |
メンバ型
| 型 | 定義 |
value_type
|
std::size_t |
type
|
std::integral_constant<std::size_t, value> |
[編集] 例
このコードを実行
#include <array> #include <iostream> #include <iterator> #include <ranges> int main() { static_assert(2 == std::tuple_size_v<std::ranges::subrange<int*, int*>>); using array5 = std::array<int, 5>; static_assert(2 == std::tuple_size<std::ranges::subrange< array5::const_iterator, array5::const_iterator>>{}); constexpr array5 a{1, 2, 3, 4, 5}; std::ranges::subrange sub_a1{a}; for (std::cout << "sub_a1: { "; int e : sub_a1) std::cout << e << ' '; std::cout << "}\n"; std::ranges::subrange sub_a2{std::next(cbegin(a)), std::prev(cend(a))}; const auto [first, last] = sub_a2; std::cout << "sub_a2 size = " << std::distance(first, last) << '\n'; for (std::cout << "sub_a2: { "; int e : sub_a2) std::cout << e << ' '; std::cout << "}\n"; }
出力
sub_a1: { 1 2 3 4 5 }
sub_a2 size = 3
sub_a2: { 2 3 4 }[編集] 関連項目
| 構造化束縛 (C++17) | 指定された名前を初期化子のサブオブジェクトまたはタプル要素に束縛します |
| (C++11) |
タプルライクな型の要素数を取得する (クラステンプレート) |
| (C++11) |
のサイズを取得する
|
| (C++11) |
pairのサイズを取得する(クラステンプレート特殊化) |
| (C++11) |
array のサイズを取得する(クラステンプレート特殊化) |
| std::ranges::subrangeのイテレータまたはセンチネルの型を取得する (クラステンプレート特殊化) |