Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: RangeAdaptorClosureObject (seit C++20)

Von cppreference.com
 
 
C++ benannte Anforderungen
 

Range-Adapter-Closure-Objekte sind FunctionObjects, die über den Pipe-Operator aufrufbar sind: Wenn C ein Range-Adapter-Closure-Objekt und R ein Range ist, sind diese beiden Ausdrücke äquivalent

C(R)
R | C

Zwei Range-Adapter-Closure-Objekte können über operator| verkettet werden, um ein weiteres Range-Adapter-Closure-Objekt zu erzeugen: Wenn C und D Range-Adapter-Closure-Objekte sind, dann erzeugt C | D ein Range-Adapter-Closure-Objekt E mit den folgenden Eigenschaften

  • E speichert eine Kopie von C und D, die jeweils direkt-nicht-list-initialisiert sind aus std::forward<decltype((C))>(C) und std::forward<decltype((D))>(D). Wenn eine solche Initialisierung ungültig ist, ist auch C | D ungültig.
  • Seien c und d die gespeicherten Kopien (mit derselben Constness und Wertkategorie wie E) und R ein Range-Objekt, so sind die folgenden Ausdrücke äquivalent
d(c(R))
R | c | d
E(R)
R | E // R | (C | D)

Hinweise: operator() wird für volatile-qualifizierte oder const-volatile-qualifizierte Versionen von Range-Adapter-Closure-Typen nicht unterstützt.

Objekte, deren Typ gleich einem der folgenden Objekte ist (unter Ignorieren der cv-Qualifikation), sind Range-Adapter-Closure-Objekte

  • unäre Range-Adapter-Objekte,
(seit C++23)
  • die Ergebnisse des Bindens von nachfolgenden Argumenten durch Range-Adapter-Objekte, und
  • die Ergebnisse des Verkettens zweier Range-Adapter-Closure-Objekte durch operator|.

[bearbeiten] Siehe auch

Hilfs-Basisklassen-Template zur Definition eines Range-Adaptor-Closure-Objekts
(Klassen-Template) [edit]