C++ 具名要求:范围适配器闭包对象 (RangeAdaptorClosureObject) (C++20 起)
来自cppreference.com
范围适配器闭包对象 是可以通过管道运算符调用的函数对象 (FunctionObject) :若 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)
注意:范围适配器闭包类型的 volatile 限定或 const-volatile 限定版本不支持 operator()。
和如下之一对象类型一致(忽略 cv-限定)的对象是范围适配器闭包对象:
- 一元范围适配器对象,
|
(C++23 起) |
- 通过范围适配器对象绑定尾随实参的结果,以及
- 使用 operator| 串联的两个范围适配器闭包对象的结果。
参阅
用于定义范围适配器闭包对象的辅助基类模板 (类模板) |