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

出自cppreference.com


 
 
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| 串聯的兩個範圍適配器閉包對象的結果。

參閱

用於定義範圍適配器閉包對象的輔助基類模板
(類模板) [編輯]