C++ named requirements: RangeAdaptorClosureObject (since C++20)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
レンジアダプタクロージャオブジェクト
は、パイプ演算子を介して呼び出し可能な
FunctionObject
s
です:
C
がレンジアダプタクロージャオブジェクトで、
R
が
range
である場合、以下の2つの式は
等価
です:
C(R) R | C
2つのレンジアダプタクロージャオブジェクトは、 operator | でチェインして別のレンジアダプタクロージャオブジェクトを生成できます: C と D がレンジアダプタクロージャオブジェクトである場合、 C | D は以下の特性を持つレンジアダプタクロージャオブジェクト E を生成します:
- E は C と D のコピーを保持し、それぞれ std:: forward < decltype ( ( C ) ) > ( C ) および std:: forward < decltype ( ( D ) ) > ( D ) から直接非リスト初期化されます。この初期化が無効な場合、 C | D も無効となります。
-
c
と
d
を(
E
と同じconst性と値カテゴリを持つ)保存されたコピーとし、
R
を
rangeオブジェクトとすると、以下の式は 等価 です:
d(c(R)) R | c | d E(R) R | E // R | (C | D)
注記: operator ( ) は、volatile修飾またはconst-volatile修飾された範囲アダプタオブジェクトクロージャ型のバージョンではサポートされていません。
以下のオブジェクトのいずれかと同じ型(cv修飾を無視)を持つオブジェクトは、レンジアダプタクロージャオブジェクトです:
- 単項範囲アダプタオブジェクト,
|
(C++23以降) |
- 範囲アダプタオブジェクトによる末尾引数のバインド結果、および
- 2つの範囲アダプタクロージャオブジェクトを operator | でチェインした結果
関連項目
|
(C++23)
|
レンジアダプタクロージャオブジェクトを定義するためのヘルパーベースクラステンプレート
(クラステンプレート) |