public member function
<functional>

std::function::operator()

Ret operator()(Args... args) const;
呼叫目標
呼叫 target 可呼叫物件,轉發 args 作為引數。

效果取決於 function 物件所指向的可呼叫物件的型別。

  • 如果 target 是一個函式指標函式物件,它會被呼叫,將引數轉發給呼叫。
  • 如果 target 是一個非靜態成員函式的指標,它會被呼叫,使用第一個引數作為呼叫該成員的物件(這可以是物件、引用或其指標),其餘引數被轉發為成員函式的引數。
  • 如果是一個非靜態資料成員的指標,它應該使用單個引數進行呼叫,函式返回對該引數成員的引用(該引數可以是物件、引用或其指標)。
  • 如果物件沒有 target(它是一個空函式),則丟擲 bad_function_call 異常。

引數

args...
呼叫的引數。
如果 function 物件所指向的可呼叫物件的型別是成員指標,第一個引數應為一個定義了該成員的物件(或其引用或指標)。

Args... 是用作類模板引數的簽名中指定的引數型別。

返回值

呼叫結果,型別為 Ret
如果 Retvoid,則函式不返回值。

Ret 是用作類模板引數的簽名中指定的返回型別(作為成員型別 function::result_type 別名)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// function::operator() example
#include <iostream>     // std::cout
#include <functional>   // std::function, std::plus, std::minus, std::multiplies

int main () {
  // an array of functions:
  std::function<int(int,int)> fn[] = {
    std::plus<int>(),
    std::minus<int>(),
    std::multiplies<int>()
  };

  for (auto& x: fn) std::cout << x(10,5) << '\n';

  return 0;
}

輸出
15
5
50


資料競爭

同時訪問該物件及其 function::target

異常安全

提供與呼叫目標可呼叫物件相同的級別。
如果 function 物件為空(即它不可呼叫),則會丟擲 bad_function_call 異常。

另見