namespace std::execution {
inline constexpr unspecified read_env{};
}
概要
read_envは、非同期動作の開始(start)時に接続先Receiverの環境に対してクエリオブジェクトで問い合わせ、読み取った値を値完了関数で送信するSenderファクトリである。
クエリオブジェクトによるReceiver環境への問い合わせはread_envSender構築時やReceiver接続(connect)ではなく、非同期動作が開始されるタイミングまで遅延される。
let_valueSenderアダプタと組み合わせたり、Sender Awaitableなコルーチンでのco_await式によって、Schedulerや停止トークンを読み取ることができる。
効果
クエリオブジェクトqに対して、呼び出し式read_env(q)は式make-sender(read_env, q)と等価。
Senderアルゴリズムタグ
Senderアルゴリズム動作説明用のクラステンプレートimpls-forに対して、下記の特殊化が定義される。
namespace std::execution {
template<>
struct impls-for<decayed-typeof<read_env>> : default-impls {
static constexpr auto start =
[](auto query, auto& rcvr) noexcept -> void {
TRY-SET-VALUE(rcvr, query(get_env(rcvr)));
};
template<class Sndr, class Env>
static consteval void check-types();
};
}
型Qをdecay_t<data-type<Sndr>>とする。
Env型の左辺値envに対して式Q()(env)が不適格もしくはvoid型をもつとき、メンバ関数check-typesはexceptionから派生した未規定の型を例外として送出する。
備考
read_envのSenderアルゴリズムタグ型は未規定とされる。
例
#include <print>
#include <execution>
namespace ex = std::execution;
int main()
{
ex::sender auto sndr = ex::read_env(ex::get_scheduler)
| ex::let_value([](auto sch) -> ex::sender auto {
// sch := sync_wait内部のScheduler
return ex::starts_on(sch, ex::just(42));
});
auto [val] = std::this_thread::sync_wait(sndr).value();
std::println("{}", val);
}
出力
42
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??