Namespaces
Variants

C++ named requirements: RangeAdaptorObject (since C++20)

From cppreference.net
C++ named requirements

レンジアダプタオブジェクト はカスタマイゼーションポイントオブジェクトであり、 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 ( ) の制約を満たす任意の引数群とする。

への呼び出し

すべて同等です。

これらの各式の結果オブジェクトは、 view オブジェクトまたは RangeAdaptorClosureObject のいずれかです。

注記

operator ( ) は、volatile修飾またはconst-volatile修飾された範囲アダプタオブジェクト型のバージョンではサポートされていません。配列と関数はバインド時にポインタに変換されます。