namespace std::execution {
template<class Tag, class Data, class... Child>
struct basic-sender : product-type<Tag, Data, Child...> { // exposition only
using sender_concept = sender_t;
using indices-for = index_sequence_for<Child...>; // exposition only
decltype(auto) get_env() const noexcept {
auto& [_, data, ...child] = *this;
return impls-for<Tag>::get-attrs(data, child...);
}
template<decays-to<basic-sender> Self, receiver Rcvr>
auto connect(this Self&& self, Rcvr rcvr) noexcept(see below)
-> basic-operation<Self, Rcvr> {
return {std::forward<Self>(self), std::move(rcvr)};
}
template<decays-to<basic-sender> Self, class Env>
auto get_completion_signatures(this Self&& self, Env&& env) noexcept
-> completion-signatures-for<Self, Env> {
return {};
}
};
}
概要
basic-sender
は、Senderアルゴリズム動作仕様定義で用いられる説明専用のクラステンプレートである。
basic-sender<Tag, Data, Child...>
はsender
のモデルであり、Senderアルゴリズム構築の結果型として利用される。
Tag
: Senderアルゴリズムタグ(例:just
,then
)Data
: Senderアルゴリズムに指定された追加の引数。複数個の引数はproduct-type
型を用いて単一値として保持する。Child
: 子Senderのリスト。Senderファクトリでは0個、Senderアダプタでは通常1個の子Senderを保持する。
クラス仕様
basic-sender
の特殊化が集成体となるか否かは未規定である。
basic-sender
型の式は構造化束縛における初期化子として利用できる。
basic-sender::connect
メンバ関数noexcept
節の式は下記の通り。
is_nothrow_constructible_v<basic-operation<Self, Rcvr>, Self, Rcvr>
説明専用のエイリアステンプレートcompletion-signatures-for
は、下記の通り定義される。
template<class Sndr, class Env>
using completion-signatures-for = see below; // exposition only
説明用のsndr
をdecltype((sndr))
がSndr
型となる式、rcvr
をsender_in<Sndr, Env> == true
となる環境Env
に関連付けられたReceiver
とする。
completion-signatures-for<Sndr, Env>
はcompletion_signatures
の特殊化であり、そのテンプレート引数は sndr
とrcvr
との接続(connect)結果Operation Stateを開始(start)して得られる可能性のある結果の完了シグネチャ集合となる。
sender_in<Sndr, Env> == false
となる場合、completion-signatures-for<Sndr, Env>
はcompletion_signatures
の特殊化ではない別の型となる。
処理系(標準ライブラリ実装者)は、この型を用いてユーザにエラー理由を通知することが推奨される。
バージョン
言語
- C++26