最終更新日時(UTC): 2025年07月11日 17時16分44秒
Koichi Murase が更新

履歴 編集

function
<future>

# std::packaged_task::get_future(C++11)

    future<R> get_future();

## 概要

結果取得のための`future`オブジェクトを取得する

## 戻り値

`*this`と同じ共有状態を持つ`future<R>`オブジェクトを返す

## 同期操作

この関数の呼び出しでは、以下の呼び出しとのデータ競合は発生しない (C++20)：

- `operator()`
- `make_ready_at_thread_exit()`

これは、以下のようなケースをサポートするための規定：

    std::packaged_task<void()> p;
    std::thread t{ []{
      p.get_future().wait();
    }};
    p();
    t.join();

## 例外

この関数は、以下のerror conditionを持つ`future_error` 例外オブジェクトを送出する可能性がある：

- `future_already_retrieved` ： すでにこの関数によって共有状態が作られている
- `no_state`： `*this`が共有状態を持っていない(デフォルト構築された`packaged_task`、ムーブされたあとなどに起こりうる)

## 例

    #include <iostream>
    #include <future>

    int calc() { return 3; }

    int main()
    {
      std::packaged_task<int()> task(calc); // calc()を非同期タスクとして登録
      std::future<int> f = task.get_future(); // 結果値取得のためのfutureを取得

      // タスクを実行
      task();

      // 結果を取得
      int result = f.get();
      std::cout << result << std::endl;
    }

### 出力

    3

## バージョン

### 言語

- C++11

### 処理系

- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2012 ✅

## 参照

- LWG Issue 2412. `promise::set_value()` and `promise::get_future()` should not race