namespace std::execution {
inline constexpr unspecified read_env{};
}
概要
read_env
は、非同期動作の開始(start)時に接続先Receiverの環境に対してクエリオブジェクトで問い合わせ、読み取った値を値完了関数で送信するSenderファクトリである。
クエリオブジェクトによるReceiver環境への問い合わせはread_env
Sender構築時やReceiver接続(connect)ではなく、非同期動作が開始されるタイミングまで遅延される。
let_value
Senderアダプタと組み合わせたり、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)));
};
};
}
備考
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++: ??