C++ named requirements: RangeAdaptorObject (since C++20)
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
Eest 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 à
- a ( args... ) ,
- std:: as_const ( a ) ( args... ) ,
- std :: move ( a ) ( args... ) , et
- std :: move ( std:: as_const ( a ) ) ( args... )
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.