Namespaces
Variants

C++ named requirements: RangeAdaptorObject (since C++20)

From cppreference.net
C++ named requirements

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 E gleich 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

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.