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

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

范围适配器闭包对象 是可以通过管道运算符调用的函数对象 (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| 串联的两个范围适配器闭包对象的结果。

参阅

用于定义范围适配器闭包对象的辅助基类模板
(类模板)