C++ 具名要求:范围适配器闭包对象 (RangeAdaptorClosureObject) (C++20 起)

来自cppreference.com
< cpp‎ | named req
 
 
C++ 具名要求
基础
类型属性
库所属
容器
容器元素
(C++11)

迭代器
流 I/O
格式化
(C++20)
随机数
(C++11)    
并发
(C++11)
(C++11)
范围
RangeAdaptorClosureObject
(C++20)
其他
(C++11)


 


范围适配器闭包对象 是可以通过管道操作符调用的 函数对象 (FunctionObject) :若 C 是范围适配器闭包对象且 R 实现了 range ,则下列两个表达式等价

C(R)
R | C

两个范围适配器闭包对象能由 operator| 连接以产生另一个范围适配器闭包对象:若 CD 为范围适配器闭包对象,则 C | D 产生范围适配器闭包对象 E 且他满足如下性质:

  • E 存储 CD 的复制,分别按照 std::forward<decltype((C))>(C)std::forward<decltype((D))>(D) 直接非列表初始化而来。如果这样的初始化非法,则 C | D 亦非法。
  • cd 表示被保存的副本(具有同 E 一样的常量性和值类别),且令 Rrange 对象,则如下表达式是等价的:
d(c(R))
R | c | d
E(R)
R | E // R | (C | D)

注意:范围适配器闭包类型的 volatile 限定或 const-volatile 限定版本不支持 operator()

范围适配器闭包对象是和如下之一对象类型一致(忽略 cv-限定)的对象:

  • 一元范围适配器对象,
(C++23 起)
  • 通过范围适配器对象绑定尾随参数的结果,以及
  • 使用 operator| 串联的两个范围适配器闭包对象的结果。