名前空間
変種
操作

C++ 名前付き要件: RangeAdaptorObject (C++20 以降)

From cppreference.com
 
 
C++ 名前付き要件
 

Range adaptor objects は、最初の引数として viewable_range を受け取り、view を返すカスタマイズポイントオブジェクトです。一部の range adaptor object は単項であり、つまり、1つの viewable_range を唯一の引数として取ります。その他の range adaptor object は、viewable_range とその他の後続の引数を取ります。

range adaptor object が1つの引数のみを取る場合、それは RangeAdaptorClosureObject でもあります。

range adaptor object が複数の引数を取る場合、それは部分適用もサポートします。以下のようにします。

  • a がそのような range adaptor object であり、
  • args... が引数(一般的には後続の引数に適したもの)である場合、

a(args...) は以下のプロパティを持ちます。

  • これは、`args...` 内の各引数 e について、`E` が decltype((e)) であり、かつ std::is_constructible_v<std::decay_t<E>, E>true である場合にのみ有効です。
  • 呼び出しが有効な場合、その結果オブジェクトは、`args...` 内の各引数 e について、std::forward<E>(e) で直接(リスト初期化以外で)初期化された std::decay_t<E> 型のサブオブジェクトを格納します(つまり、range adaptor object は引数を値でバインドします)。
  • 結果オブジェクトは RangeAdaptorClosureObject です。
  • RangeAdaptorClosureObject の呼び出しは、バインドされた引数(存在する場合)を関連付けられた range adaptor object に転送します。バインドされた引数(存在する場合)は、RangeAdaptorClosureObject の値カテゴリと cv 修飾を持つと見なされます。言い換えると、a(args...)(r)std::bind_back(a, args...)(r) と等価ですが、前者はパイプ構文もサポートします。(C++23 以降)

他のカスタマイズポイントオブジェクトと同様に、以下のようにします。

  • a が、いずれかの range adaptor object の型の cv 修飾されていないバージョンであるオブジェクトであり、
  • args... が、a の型の `operator()` の制約を満たす任意の引数のグループである場合、

以下の呼び出しは

すべて等価です。

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

[編集] 注記

operator() は、range adaptor object 型の volatile 修飾または const-volatile 修飾されたバージョンではサポートされていません。配列と関数は、バインド時にポインタに変換されます。

English 日本語 中文(简体) 中文(繁體)