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

履歴 編集

concept
<execution>

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

namespace std::execution {
  template<class O>
  concept operation_state =
    derived_from<typename O::operation_state_concept, operation_state_t> &&
    is_object_v<O> &&
    requires (O& o) {
      { start(o) } noexcept;
    };

  struct operation_state_t {};  // タグ型
}

概要

operation_stateは、型OがOperation State型の要件を満たすことを表すコンセプトである。

下記をみたすクラス型はOperation Stateとみなせる。

  • operation_state_tをメンバ型O::operation_state_conceptとして定義するクラス型
  • O型の左辺値oに対してexecution::start(o)が有効な式かつ例外送出されないこと

同期操作の生存期間中にoperation_stateオブジェクトが破棄されると、未定義の動作を引き起こす。

#include <print>
#include <execution>
namespace ex = std::execution;

struct ValueReceiver {
  using receiver_concept = ex::receiver_t;

  void set_value(int v) && noexcept
  {
    std::println("{}", v);
  }
};

int main()
{
  // 値42を送信するSender
  ex::sender auto sndr = ex::just(42);
  // int値を受信して表示するReceiver
  ValueReceiver rcvr;

  // SenderとReceiverを接続
  ex::operation_state auto op = ex::connect(sndr, rcvr);
  // Operation Stateを開始
  ex::start(op);
}

出力

42

バージョン

言語

  • C++26

処理系

関連項目

参照