C++ named requirements: RangeAdaptorClosureObject (since C++20)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
范围适配器闭包对象
是通过管道运算符调用的
函数对象
:若
C
是范围适配器闭包对象且
R
为
range
,则以下两种表达式
等价
:
C(R) R | C
两个范围适配器闭包对象可以通过 operator | 进行链式组合,生成另一个范围适配器闭包对象:若 C 与 D 均为范围适配器闭包对象,则 C | D 将生成具有以下特性的范围适配器闭包对象 E :
- E 存储 C 和 D 的副本,分别从 std:: forward < decltype ( ( C ) ) > ( C ) 和 std:: forward < decltype ( ( D ) ) > ( D ) 直接非列表初始化。若此类初始化无效,则 C | D 同样无效。
-
令
c
和
d
为存储的副本(具有与
E
相同的常量性和值类别),且
R
为
range对象,则下列表达式是 等价的 :
d(c(R)) R | c | d E(R) R | E // R | (C | D)
说明: operator ( ) 不支持对具有 volatile 限定或 const-volatile 限定的范围适配器对象闭包类型进行重载。
其类型与下列对象之一相同的对象(忽略 cv 限定符)属于范围适配器闭包对象:
- 一元范围适配器对象,
|
(since C++23) |
- 通过范围适配器对象绑定尾部参数的结果,以及
- 通过 operator | 链接两个范围适配器闭包对象的结果。
参见
|
(C++23)
|
用于定义范围适配器闭包对象的辅助基类模板
(类模板) |