std::experimental::ranges:: iterator_category
From cppreference.net
<
cpp
|
experimental
|
ranges
|
ヘッダーで定義
<experimental/ranges/iterator>
|
||
|
template
<
class
I
>
struct iterator_category { } ; |
(1) | |
|
template
<
class
T
>
struct iterator_category < T * > ; |
(2) | |
|
template
<
class
T
>
struct iterator_category < const T > : iterator_category < T > { } ; |
(3) | |
|
template
<
class
T
>
requires requires
{
typename
T
::
iterator_category
;
}
|
(4) | |
クラス
I
のイテレータカテゴリを計算します(存在する場合)。ユーザーはプログラム定義型に対して
iterator_category
を特殊化できます。
1)
プライマリテンプレートは空の構造体です。
2)
ポインタに対する特殊化。
T
がオブジェクト型の場合、メンバ型
type
を
ranges::random_access_iterator_tag
と等しいものとして提供する。それ以外の場合、メンバ
type
は存在しない。
3)
const修飾型に対する特殊化。
4)
公開かつアクセス可能なメンバ型
iterator_category
を定義する型に対する特殊化。
T::iterator_category
が
std
名前空間内のイテレータカテゴリタグのいずれかと同じか、それから派生している場合、以下に記述されるように
ranges
名前空間内の対応するタグにマッピングされる。それ以外の場合、
type
メンバ型を
T::iterator_category
と等しく定義する。
-
T::iterator_categoryが std::random_access_iterator_tag と同じか、それから派生している場合、typeメンバ型を ranges::random_access_iterator_tag と等しく定義する。 -
それ以外で、
T::iterator_categoryが std::bidirectional_iterator_tag と同じか、それから派生している場合、typeメンバ型を ranges::bidirectional_iterator_tag と等しく定義する。 -
それ以外で、
T::iterator_categoryが std::forward_iterator_tag と同じか、それから派生している場合、typeメンバ型を ranges::forward_iterator_tag と等しく定義する。 -
それ以外で、
T::iterator_categoryが std::input_iterator_tag と同じか、それから派生している場合、typeメンバ型を ranges::input_iterator_tag と等しく定義する。 -
それ以外で、
T::iterator_categoryが std::output_iterator_tag と同じか、それから派生している場合、typeメンバ型は定義されない。
ヘルパーエイリアステンプレート
|
template
<
class
T
>
using iterator_category_t = typename ranges :: iterator_category < T > :: type ; |
(ranges TS) | |
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
イテレータカテゴリを示すために使用される空のクラス型
(クラス) |
|
|
イテレータカテゴリを示すために使用される空のクラス型
(クラス) |
|
|
イテレータの関連型を収集する互換性特性クラス
(エイリアステンプレート) |