Namensräume
Varianten
Aktionen

std::experimental::ranges::iterator_category

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
Iterator-Bibliothek
Iterator-Konzepte
Indirekte aufrufbare Konzepte
                                                  
                                                  
                                                  
Gemeinsame Algorithmus-Anforderungen
                                                  
Konzept-Dienstprogramme
Iterator-Dienstprogramme und -Operationen
Iterator-Traits
Iterator-Adapter
Stream-Iteratoren
 
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; }

struct iterator_category<T>;
(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_category gleich std::random_access_iterator_tag ist oder davon abgeleitet wird, wird ein Mitgliedstyp type bereitgestellt, der gleich ranges::random_access_iterator_tag ist.
  • Andernfalls, wenn T::iterator_category gleich std::bidirectional_iterator_tag ist oder davon abgeleitet wird, wird ein Mitgliedstyp type bereitgestellt, der gleich ranges::bidirectional_iterator_tag ist.
  • Andernfalls, wenn T::iterator_category gleich std::forward_iterator_tag ist oder davon abgeleitet wird, wird ein Mitgliedstyp type bereitgestellt, der gleich ranges::forward_iterator_tag ist.
  • Andernfalls, wenn T::iterator_category gleich std::input_iterator_tag ist oder davon abgeleitet wird, wird ein Mitgliedstyp type bereitgestellt, der gleich ranges::input_iterator_tag ist.
  • Andernfalls, wenn T::iterator_category gleich std::output_iterator_tag ist oder davon abgeleitet wird, gibt es kein Mitglied type.

[bearbeiten] Hilfs-Alias-Template

template< class T >
using iterator_category_t = typename ranges::iterator_category<T>::type;
(Ranges TS)

[bearbeiten] Beispiel

[bearbeiten] Siehe auch

leere Klassentypen, die zur Angabe von Iterator-Kategorien verwendet werden
(Klasse) [bearbeiten]
leere Klassentypen, die zur Angabe von Iterator-Kategorien verwendet werden
(Klasse) [bearbeiten]
Kompatibilitäts-Traits-Klasse, die die zugehörigen Typen eines Iterators sammelt
(Alias-Vorlage)[bearbeiten]