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|串聯的兩個範圍適配器閉包對象的結果。
參閱
| 用於定義範圍適配器閉包對象的輔助基類模板 (類模板) |