最終更新日時(UTC):
が更新

履歴 編集

class template
<execution>

std::execution::sender_adaptor_closure(C++26)

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個の束縛引数エンティティとして持つ。
  • 説明用のargeに対する関数呼び出し式の引数としたとき、呼び出しパターン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のモデルである式sndrargs...を式adaptor(sndr, args...)適格となる引数リスト、型パックBoundsArgsdecltype(auto(args))...とする。 式adaptor(args...)は、下記の特性をもつ完全転送呼び出しラッパーであるパイプ可能Senderアダプタクロージャオブジェクトfを生成する。

  • 対象オブジェクトはadaptorのコピー。
  • 束縛引数エンティティbound_argsは、それぞれstd::forward<decltype((args))>(args)...直接非リスト初期化された型BoundArgs...のオブジェクトから構成される。
  • 説明用のrcvrfに対する関数呼び出し式の引数としたとき、呼び出しパターンadaptor(rcvr, bound_args...)に対応する。

adaptor(args...)は、前述の通り結果の束縛引数エンティティの初期化が適格な場合に限って適格となる。

バージョン

言語

  • C++26

処理系

関連項目

参照