namespace std::execution {
template<class-type D>
struct sender_adaptor_closure { };
}
概要
sender_adaptor_closureは、ユーザ定義のパイプ可能Senderアダプタクロージャオブジェクトの実装を補助するクラステンプレートである。
sender_adaptor_closure<T>を基底クラスとして持つクラス型Tのオブジェクトは、パイプ可能Senderアダプタクロージャオブジェクトとなる。
sender_adaptor_closureのテンプレートパラメータDは不完全型でもよい。
|演算子のオペランドにcv修飾された型Dの式が登場するまでに、Dは完全型かつderived_from<sender_adaptor_closure<D>>のモデルとなるべき。
パイプ可能Senderアダプタクロージャオブジェクト
パイプ可能Senderアダプタクロージャオブジェクト(pipeable sender adaptor closure object)とは、1つ以上のsenderを引数にとり、戻り値としてsenderを返す関数オブジェクトである。
パイプ可能Senderアダプタクロージャオブジェクトcと型decltype((sndr))がsenderのモデルである式sndrに対して、下記の2つの式は等価であり、いずれもsenderを生成する。
c(sndr)
sndr | c
さらにパイプ可能Senderアダプタクロージャオブジェクトdが与えられたとき、式 c | d は別のパイプ可能Senderアダプタクロージャオブジェクトeとなる。
このとき、eは下記の特性を持つ完全転送呼び出しラッパー(perfect forwarding call wrapper)である。
- 対象オブジェクトは、
dで直接非リスト初期化された型decltype(auto(d))のオブジェクトd2である。 cで直接非リスト初期化された型decltype(auto(c))のオブジェクトc2を、1個の束縛引数エンティティとして持つ。- 説明用の
argをeに対する関数呼び出し式の引数としたとき、呼び出しパターンd2(c2(arg))に対応する。
式 c | d は、eの全て状態エンティティ(state entities)の初期化が適格な場合に限って適格となる。
パイプ可能Senderアダプタオブジェクト
パイプ可能Senderアダプタオブジェクト(pipeable sender adaptor object)とは、第1引数にsenderをとり、戻り値としてsenderを返すカスタマイゼーションポイントオブジェクトである。
パイプ可能Senderアダプタオブジェクトが1個の引数しかとらないとき、パイプ可能Senderアダプタクロージャオブジェクトとなる。
パイプ可能Senderアダプタオブジェクトadaptorが1個より多い引数をとるとき、型decltype((sndr))がsenderのモデルである式sndr、args...を式adaptor(sndr, args...)が適格となる引数リスト、型パックBoundsArgsをdecltype(auto(args))...とする。
式adaptor(args...)は、下記の特性をもつ完全転送呼び出しラッパーであるパイプ可能Senderアダプタクロージャオブジェクトfを生成する。
- 対象オブジェクトは
adaptorのコピー。 - 束縛引数エンティティ
bound_argsは、それぞれstd::forward<decltype((args))>(args)...で直接非リスト初期化された型BoundArgs...のオブジェクトから構成される。 - 説明用の
rcvrをfに対する関数呼び出し式の引数としたとき、呼び出しパターンadaptor(rcvr, bound_args...)に対応する。
式adaptor(args...)は、前述の通り結果の束縛引数エンティティの初期化が適格な場合に限って適格となる。
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??