最終更新日時: 2025年06月08日 21時43分49秒 (JST)
yoh が更新

履歴 編集

class template
<stop_token>

# std::stop_callback(C++20)

    namespace std {
      template<class CallbackFn>
      class stop_callback;
    }

## 概要

`stop_callback`クラステンプレートは、停止要求が作成された際に呼び出されるコールバックを表す。

## 適格要件

テンプレート引数`CallbackFn`が`invocable`および`destructible`を満たすこと。

## メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ | C++20
`(destructor)` | デストラクタ | C++20
`operator=(const stop_callback&) = delete;` | 代入演算子 | C++20
`operator=(stop_callback&&) = delete;` | 代入演算子 | C++20

## メンバ型

名前 | 説明 | 対応バージョン
--- | --- | ---
`callback_type` | `CallbackFn` | C++20

## 推論補助

名前 | 説明 | 対応バージョン
--- | --- | ---
`(deduction_guide)` | クラステンプレートの推論補助 | C++20

## 例

    #include <cassert>
    #include <stop_token>
    #include <string>

    int main()
    {
      std::string msg;

      std::stop_source ss;
      std::stop_token st = ss.get_token();
      std::stop_callback cb1(st, [&] { msg += "hello"; });

      assert(msg == "");

      ss.request_stop();

      // 停止要求が作成される前に登録されていたコールバック関数は、
      // 停止要求が作成された際にその中で呼び出される
      assert(msg == "hello");

      std::stop_callback cb2(st, [&] { msg += " world"; });

      // 停止要求が作成されたあとに登録されたコールバック関数は、
      // std::stop_callback クラスのコンストラクタの中で即座に呼び出される
      assert(msg == "hello world");
    }

### 出力

## バージョン

### 言語

- C++20

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??

## 関連項目

- `stop_token`
- `stop_source`

## 参照

- P0660R10 Stop token and joining thread