最終更新日時: 2026年04月23日 21時23分31秒 (JST)
yoh が更新

履歴 編集

class template
<execution>

# std::execution::run_loop::run-loop-opstate(C++26)

    template<class Rcvr>
    struct run-loop-opstate;

## 概要

`run-loop-opstate`は、`run_loop`動作説明で利用される説明専用のクラスである。

## クラス仕様

説明専用の基底クラス`run-loop-opstate-base`を下記の通り定義する。 `run-loop-opstate<Rcvr>`は、`run-loop-opstate-base`から曖昧さなくprivate継承したクラスである。

    struct run-loop-opstate-base {  // exposition only
      virtual void execute() noexcept = 0;  // exposition only
      run_loop* loop;                       // exposition only
      run-loop-opstate-base* next;          // exposition only
    };

説明用の`o`を`run-loop-opstate<Rcvr>`型の非const左辺値、`REC(o)`を`o`を返す接続(connect)呼び出しへ渡した式`rcvr`で初期化された`Rcvr`型の非const左辺値参照とする。

- `REC(o)`が参照するオブジェクトは、`o`が参照するオブジェクトの生存期間(lifetime)で有効である。

- 型`run-loop-opstate<Rcvr>`は`run-loop-opstate-base::execute()`をオーバーライドし、式`o.execute()`は下記と等価 :

      if (get_stop_token(REC(o)).stop_requested()) {
        set_stopped(std::move(REC(o)));
      } else {
        set_value(std::move(REC(o)));
      }

- 式`start(o)`は下記と等価 :

      o.loop->push-back(addressof(o));

## バージョン

### 言語

- C++26

## 関連項目

- `run`
- `execution::connect`
- `execution::start`

## 参照

- P2300R10 `std::execution`
- LWG4476. `run_loop` should not have a `set_error` completion