最終更新日時(UTC):
が更新

履歴 編集

customization point object
<execution>

std::execution::read_env(C++26)

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)));
      };
  };
}

備考

read_envSenderアルゴリズムタグ型未規定とされる。

#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

処理系

関連項目

参照