std::execution::read_env
| ヘッダ <execution> で定義 |
||
| inline constexpr /*未指定*/ read_env{}; |
(C++26以降) (カスタマイズポイントオブジェクト) |
|
| 呼び出しシグネチャ |
||
| execution::sender auto read_env( auto&& query ); |
(C++26以降) | |
指定されたクエリオブジェクトに関連付けられた現在の値を取得するために、レシーバーの環境にアクセスする sender を返す sender ファクトリです。
任意のクエリオブジェクト q に対して、式 read_env(q) は /*make-sender*/(read_env, q) と 式同等です。
カスタマイゼーションポイントオブジェクト
execution::read_env という名前は、関数オブジェクトであり、リテラルなsemiregularクラス型の const なカスタム化ポイントオブジェクトを指します。説明のために、その型の cv 修飾されていないバージョンは __read_env_fn と表記されます。
__read_env_fn のすべてのインスタンスは等価です。同じ引数に対して異なる __read_env_fn 型のインスタンスを呼び出した効果は、インスタンスを表す式が左辺値か右辺値か、また const 修飾されているかどうかにかかわらず、同等です(ただし、volatile 修飾されたインスタンスは呼び出し可能であることが要求されません)。したがって、execution::read_env は自由にコピーでき、そのコピーは相互に交換可能です。
型 Args... のセットが与えられた場合、std::declval<Args>()... が上記の execution::read_env への引数の要件を満たす場合、__read_env_fn は以下をモデル化します。
- std::invocable<__read_env_fn, Args...>,
- std::invocable<const __read_env_fn, Args...>,
- std::invocable<__read_env_fn&, Args...>、および
- std::invocable<const __read_env_fn&, Args...>.
それ以外の場合、__read_env_fn の関数呼び出し演算子はオーバーロード解決に参加しません。
[編集] 例
このファクトリの使用例として、read_env(get_scheduler) を使用して取得できるレシーバーのスケジューラに依存する作業をスケジュールすることが挙げられます。
std::execution::sender auto task = std::execution::read_env(std::execution::get_scheduler) | std::execution::let_value([](auto sched) { return std::execution::starts_on(sched, /*some nested work here*/); }); std::this_thread::sync_wait( std::move(task) ); // wait for it to finish