public member function
<future>

std::packaged_task::operator()

void operator()(Args... args);
呼叫儲存的任務
呼叫*儲存的任務*,將其引數 args 轉發給它。

- 如果*儲存的任務*的呼叫成功完成,它返回的值(如果有)將儲存在*共享狀態*中。
- 如果*儲存的任務*的呼叫丟擲異常,該異常將被捕獲並也儲存在*共享狀態*中。

在這兩種情況下,*共享狀態*都會變為*就緒*(這將解除阻止任何當前等待它的執行緒)。

可以透過呼叫先前呼叫成員函式 get_future 返回的*future*物件上的 get 來訪問*共享狀態*。

通常在*構造時*指定*儲存的任務*。呼叫它的效果取決於其型別。

  • 如果*儲存的任務*是*函式指標*或*函式物件*,則會轉發引數給呼叫。
  • 如果*儲存的任務*是*指向非靜態成員函式的指標*,它將使用第一個引數作為呼叫成員的物件(這可能是物件、引用或其指標),其餘引數將作為成員函式的引數轉發。
  • 如果它是*指向非靜態資料成員的指標*,它應該只帶一個引數呼叫,並且該函式將儲存在*共享狀態*中對其引數的成員的引用(引數可能是物件、引用或其指標)。

引數

args...
呼叫的引數。
如果*儲存的任務*的型別是*成員指標*,第一個引數應該是定義了該成員的物件(或其引用或指標)。

Args... 是*packaged_task*模板引數,它們表示*儲存的任務*的引數型別。

返回值

無。

*儲存的任務*的返回值(如果有)將儲存在*共享狀態*中。

資料競爭

*packaged_task*已被修改。
共享狀態被修改為原子操作(不會導致資料競爭)。

異常安全

基本保證:如果丟擲異常,*packaged_task*處於有效狀態。

此成員函式在以下條件下丟擲異常
exception typeerror condition描述
future_errorfuture_errc::no_state該物件沒有*共享狀態*(它是*預設構造*的*packaged_task*)。
future_errorfuture_errc::promise_already_satisfied*儲存的任務*已被呼叫。
此成員函式在引數的任何複製或移動操作丟擲異常時也會丟擲,並且(取決於庫實現)也可能丟擲以報告其他情況。

另見