C++ named requirements: RangeAdaptorObject (since C++20)
Range-Adapter-Objekte
sind Anpassungspunktobjekte, die ein
viewable_range
als erstes Argument akzeptieren und eine
view
zurückgeben. Einige Range-Adapter-Objekte sind unär, d.h. sie nehmen eine
viewable_range
als einziges Argument. Andere Range-Adapter-Objekte nehmen eine
viewable_range
und weitere nachfolgende Argumente.
Wenn ein Bereichsadapterobjekt nur ein Argument akzeptiert, ist es auch ein RangeAdaptorClosureObject .
Wenn ein Bereichsadapterobjekt mehr als ein Argument akzeptiert, unterstützt es auch partielle Anwendung: lassen Sie
- a sei ein solches Range-Adapter-Objekt, und
- args... seien Argumente (im Allgemeinen geeignet für nachfolgende Argumente),
expression a ( args... ) hat folgende Eigenschaften:
-
es ist genau dann gültig, wenn für jedes Argument
e
in
args...
für das
Egleich decltype ( ( e ) ) ist, std:: is_constructible_v < std:: decay_t < E > , E > gleich true ist, - wenn der Aufruf gültig ist, speichert sein Ergebnisobjekt ein Unterobjekt vom Typ std:: decay_t < E > , das direkt-nicht-Listen-initialisiert wird mit std:: forward < E > ( e ) , für jedes Argument e in args... (mit anderen Worten: Bereichsadapterobjekte binden Argumente als Wert),
- das Ergebnisobjekt ist ein RangeAdaptorClosureObject ,
- der Aufruf des RangeAdaptorClosureObject leitet die gebundenen Argumente (falls vorhanden) an das zugehörige Bereichsadapterobjekt weiter. Die gebundenen Argumente (falls vorhanden) haben den Wertkategorie- und CV-Qualifikationsstatus des RangeAdaptorClosureObject . Mit anderen Worten: a ( args... ) ( r ) ist äquivalent zu std:: bind_back ( a, args... ) ( r ) (aber Ersteres unterstützt auch die Pipe-Syntax). (seit C++23)
Wie andere Anpassungspunktobjekte lässt
- a sei ein Objekt der cv-unqualifizierten Version des Typs beliebiger Range-Adapter-Objekte,
- args... sei eine beliebige Gruppe von Argumenten, die den Einschränkungen des operator ( ) des Typs von a genügt,
Aufrufe von
- a ( args... ) ,
- std:: as_const ( a ) ( args... ) ,
- std :: move ( a ) ( args... ) , und
- std :: move ( std:: as_const ( a ) ) ( args... )
sind alle äquivalent.
Das Ergebnisobjekt jeder dieser Ausdrücke ist entweder ein
view
-Objekt oder ein
RangeAdaptorClosureObject
.
Hinweise
operator ( ) wird für volatile-qualifizierte oder const-volatile-qualifizierte Versionen von Range-Adapter-Objekttypen nicht unterstützt. Arrays und Funktionen werden während der Bindung in Zeiger konvertiert.