Namespaces
Variants

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

From cppreference.net
C++ named requirements

Les objets adaptateurs de plage sont des objets de point de personnalisation qui acceptent viewable_range comme premier argument et retournent une view . Certains objets adaptateurs de plage sont unaires, c'est-à-dire qu'ils prennent un seul viewable_range comme unique argument. D'autres objets adaptateurs de plage prennent un viewable_range et d'autres arguments supplémentaires.

Si un objet adaptateur de plage ne prend qu'un seul argument, il est également un RangeAdaptorClosureObject .

Si un objet adaptateur de plage prend plus d'un argument, il prend également en charge l'application partielle : soit

  • a soit un tel objet adaptateur de plage, et
  • args... soit des arguments (généralement appropriés pour les arguments de fin),

expression a ( args... ) possède les propriétés suivantes :

  • il est valide si et seulement si pour chaque argument e dans args... tel que E est decltype ( ( e ) ) , std:: is_constructible_v < std:: decay_t < E > , E > est true ,
  • lorsque l'appel est valide, son objet résultat stocke un sous-objet de type std:: decay_t < E > initialisé directement (non par liste) avec std:: forward < E > ( e ) , pour chaque argument e dans args... (en d'autres termes, les objets adaptateurs de gamme lient les arguments par valeur),
  • l'objet résultat est un RangeAdaptorClosureObject ,
  • appeler le RangeAdaptorClosureObject transmet les arguments liés (le cas échéant) à l'objet adaptateur de gamme associé. Les arguments liés (le cas échéant) sont considérés comme ayant la catégorie de valeur et la qualification cv du RangeAdaptorClosureObject . En d'autres termes, a ( args... ) ( r ) est équivalent à std:: bind_back ( a, args... ) ( r ) (mais le premier supporte également la syntaxe de pipeline). (depuis C++23)

Comme les autres objets de point de personnalisation, soit

  • a soit un objet de la version non qualifiée cv du type de tout objet adaptateur de plage,
  • args... soit tout groupe d'arguments qui satisfait les contraintes de l' operator ( ) du type de a ,

appels à

sont tous équivalents.

L'objet résultant de chacune de ces expressions est soit un view , soit un RangeAdaptorClosureObject .

Notes

operator ( ) n'est pas pris en charge pour les versions qualifiées volatile ou const-volatile des types d'objets adaptateurs de plage. Les tableaux et les fonctions sont convertis en pointeurs lors de la liaison.