std::experimental::ranges::iterator_category
Von cppreference.com
< cpp | experimental | ranges
| Definiert in Header <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) | |
Berechnet die Iterator-Kategorie der Klasse I, falls vorhanden. Benutzer können iterator_category für einen vom Programm definierten Typ spezialisieren.
1) Primäre Template ist eine leere Struktur.
2) Spezialisierung für Zeiger. Wenn
T ein Objekttyp ist, wird ein Mitgliedstyp type bereitgestellt, der gleich ranges::random_access_iterator_tag ist. Andernfalls gibt es kein Mitglied type.3) Spezialisierung für const-qualifizierte Typen.
4) Spezialisierung für Typen, die einen öffentlichen und zugänglichen Mitgliedstyp
iterator_category definieren. Wenn T::iterator_category gleich einem der Iterator-Kategorie-Tags im Namespace std ist oder davon abgeleitet wird, wird er wie unten beschrieben auf den entsprechenden Tag im Namespace ranges abgebildet. Andernfalls wird ein Mitgliedstyp type bereitgestellt, der gleich T::iterator_category ist.- Wenn
T::iterator_categorygleich std::random_access_iterator_tag ist oder davon abgeleitet wird, wird ein Mitgliedstyptypebereitgestellt, der gleich ranges::random_access_iterator_tag ist. - Andernfalls, wenn
T::iterator_categorygleich std::bidirectional_iterator_tag ist oder davon abgeleitet wird, wird ein Mitgliedstyptypebereitgestellt, der gleich ranges::bidirectional_iterator_tag ist. - Andernfalls, wenn
T::iterator_categorygleich std::forward_iterator_tag ist oder davon abgeleitet wird, wird ein Mitgliedstyptypebereitgestellt, der gleich ranges::forward_iterator_tag ist. - Andernfalls, wenn
T::iterator_categorygleich std::input_iterator_tag ist oder davon abgeleitet wird, wird ein Mitgliedstyptypebereitgestellt, der gleich ranges::input_iterator_tag ist. - Andernfalls, wenn
T::iterator_categorygleich std::output_iterator_tag ist oder davon abgeleitet wird, gibt es kein Mitgliedtype.
[bearbeiten] Hilfs-Alias-Template
| template< class T > using iterator_category_t = typename ranges::iterator_category<T>::type; |
(Ranges TS) | |
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
| leere Klassentypen, die zur Angabe von Iterator-Kategorien verwendet werden (Klasse) | |
| leere Klassentypen, die zur Angabe von Iterator-Kategorien verwendet werden (Klasse) | |
| Kompatibilitäts-Traits-Klasse, die die zugehörigen Typen eines Iterators sammelt (Alias-Vorlage) |