C++ named requirements: RangeAdaptorObject (since C++20)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
レンジアダプタオブジェクト
はカスタマイゼーションポイントオブジェクトであり、
viewable_range
を第一引数として受け取り、
view
を返します。一部のレンジアダプタオブジェクトは単項であり、すなわち1つの
viewable_range
のみを引数として取ります。他のレンジアダプタオブジェクトは
viewable_range
とその他の後続引数を取ります。
範囲アダプタオブジェクトが単一の引数のみを取る場合、それはまた RangeAdaptorClosureObject でもあります。
範囲アダプタオブジェクトが複数の引数を取る場合、部分適用もサポートします:すなわち
- a をそのような範囲アダプタオブジェクトとし、
- args... を引数(一般的に末尾引数として適切なもの)とする。
expression a ( args... ) は以下のプロパティを持ちます:
-
すべての引数
e
について、
args...
内の
Eが decltype ( ( e ) ) である場合、 std:: is_constructible_v < std:: decay_t < E > , E > が true である場合にのみ有効です。 - 呼び出しが有効な場合、その結果オブジェクトは std:: decay_t < E > 型のサブオブジェクトを格納し、これは std:: forward < E > ( e ) で直接非リスト初期化されます(つまり、範囲アダプタオブジェクトは引数を値で束縛します)。
- 結果オブジェクトは RangeAdaptorClosureObject です。
- RangeAdaptorClosureObject の呼び出しは、束縛された引数(存在する場合)を関連する範囲アダプタオブジェクトに転送します。束縛された引数(存在する場合)は、 RangeAdaptorClosureObject の値カテゴリとCV修飾を持つと見なされます。 言い換えると、 a ( args... ) ( r ) は std:: bind_back ( a, args... ) ( r ) と等価です(ただし前者はパイプ構文もサポートします)。 (C++23以降)
他のカスタマイゼーションポイントオブジェクトと同様に、以下を定義します
- a を、任意のレンジアダプタオブジェクトの型のCV修飾なしバージョンのオブジェクトとする。
- args... を、 a の型の operator ( ) の制約を満たす任意の引数群とする。
への呼び出し
- a ( args... ) 、
- std:: as_const ( a ) ( args... ) 、
- std :: move ( a ) ( args... ) 、および
- std :: move ( std:: as_const ( a ) ) ( args... )
すべて同等です。
これらの各式の結果オブジェクトは、
view
オブジェクトまたは
RangeAdaptorClosureObject
のいずれかです。
注記
operator ( ) は、volatile修飾またはconst-volatile修飾された範囲アダプタオブジェクト型のバージョンではサポートされていません。配列と関数はバインド時にポインタに変換されます。