類模板
<functional>

std::function

template <class T> function;     // undefinedtemplate <class Ret, class... Args> class function<Ret(Args...)>;
函式包裝器
此類可以包裝任何種類的*可呼叫元素*(例如*函式*和*函式物件*)到一個可複製的物件中,並且其型別僅取決於其呼叫簽名(而不是其*可呼叫元素*的型別本身)。

函式包裝類例項的物件可以包裝以下任一型別的*可呼叫物件*:函式、函式指標、成員指標,或任何函式物件(即,類定義了operator()的物件,包括*閉包*)。

函式包裝器物件在內部儲存包裝的*可呼叫物件*的*decay*副本,該副本成為函式的target。在例項化function包裝器類時,不需要該目標*可呼叫物件*的具體型別;只需要其*呼叫簽名*。

function物件可以被複制和移動,並可用於直接呼叫具有指定呼叫簽名的*可呼叫物件*(參見成員operator())。

function物件也可以處於沒有target*可呼叫物件*的狀態。在這種情況下,它們被稱為*空函式*,呼叫它們會丟擲bad_function_call異常。

模板引數

T
一個型別。
泛化模板未定義。只有專門化T為函式型別Ret(Args...)的模板。
Ret
呼叫函式時產生的結果型別。
Args
引數的型別。
這是一個包含任意數量型別的*模板引數包*。
對於成員指標,第一個型別應為該成員指標所指向類的引用的型別。

成員型別

成員型別定義
result_typeRet
argument_type如果Args...是單個型別,則它是該單個型別的別名。
否則,未定義。
first_argument_type如果Args...恰好包含兩個型別,則它是第一個型別的別名。
否則,未定義。
second_argument_type如果Args...恰好包含兩個型別,則它是第二個型別的別名。
否則,未定義。
請注意,除了result_type之外,其他成員型別並非總是已定義。

成員函式


非成員函式過載