namespace std::execution {
template <class T, class Environment>
template <receiver R>
class task<T, Environment>::state { // exposition only
public:
using operation_state_concept = operation_state_t;
template <class Rcvr>
state(coroutine_handle<promise_type> h, Rcvr&& rr);
~state();
void start() & noexcept;
private:
using own-env-t = see below; // exposition only
coroutine_handle<promise_type> handle; // exposition only
remove_cvref_t<R> rcvr; // exposition only
own-env-t own-env; // exposition only
Environment environment; // exposition only
};
}
概要
task<T,E>::stateは、タスクコルーチン動作の説明専用クラステンプレートである。
クラス仕様
説明専用のown-env-tは、有効な型ならばEnvironment::template env_type<decltype(get_env(declval<R>()))>となる。そうでなければenv<>となる。
template <class Rcvr>
state(coroutine_handle<promise_type> h, Rcvr&& rr);
- 効果 :
~state();
-
効果 : 以下と等価。
if (handle) handle.destroy();
void start() & noexcept;
-
効果 : 説明用の
promをhandle.promise()オブジェクトとする。*thisと関連するSTATE(prom)、RCVR(prom)、SCHED(prom)を下記とする。STATE(prom):*thisRCVR(prom):rcvrSCHED(prom): 式が有効ならばscheduler_type(get_scheduler(get_env(rcvr)))で初期化したオブジェクト、そうでなればscheduler_type()。いずれの式も適格でなければ、プログラムは不適格となる。
説明用の
stをget_stop_token(get_env(rcvr))とする。prom.tokenとprom.sourceを下記のように初期化する。prom.token.stop_requested():st.stop_requested()を返す。prom.token.stop_possible():st.stop_possible()を返す。 ― 型Fnと型Initをそれぞれinvocable<F>とconstructible_from<Fn, Init>のモデルとしたとき、stop_token::callback_type<Fn>はstoppable-callback-for<Fn, stop_token_type, Init>のモデルである。
その後、
handle.resume()を呼び出す。
バージョン
言語
- C++26