HOWTO · C++

C++ 中的函子

關於在 C++ 中使用函子的快速教程。

這個簡單的教程介紹了函子及其在 C++ 程式語言中的使用。首先,本文將簡要介紹函子,然後介紹其語法和可用性。

C++ 中的函子簡介

函子是可以表現得像函式的類物件。C++ 標準模板庫 (STL) 中有許多可用的仿函式,你也可以製作自己的仿函式。

函子的主要優點是雖然它們不是函式,但它們仍然可以儲存狀態,因為它們是類物件。

函子是通過在任何類中過載運算子 () 來建立的,以便可以呼叫該類的物件,就像我們稱為簡單函式一樣。

讓我們看一下下面的例子有一個清晰的認識。

class Hello {
 public:
  void operator()() { cout << "Hello from Functor" << endl; }
};

現在要使用它,我們將建立一個 Hello 類的物件並像這樣呼叫它:

int main() {
  Hello hello;
  hello();
  return 0;
}

輸出:

Hello from Functor

我們可以從輸出中看到,當我們將物件與運算子一起使用時,會呼叫函式呼叫運算子 ()

C++ 中帶引數的函子

函子也可以定義為具有一些引數和返回型別,就像函式一樣。我們可以修改之前的函子以在其中包含引數。

class Hello {
 public:
  void operator()(string name) {
    cout << "Hello " << name << " from Functor" << endl;
  }
};

要呼叫它,我們還需要傳遞引數。

int main() {
  Hello hello;
  hello("david");
  return 0;
}

輸出:

Hello david from Functor

C++ 中的預定義函子

許多函子包含在 C++ 標準模板庫中打包的 功能 標頭檔案中。其中一些在這裡討論。

函子名稱 描述
plus 計算作為引數傳遞的兩個數字的總和。
minus 計算作為引數傳遞的兩個數字之間的差。
multiplies 計算作為引數傳遞的兩個數字的乘積。
divides 計算作為引數傳遞的兩個數字的除法結果。
equal_to 檢查傳遞的兩個引數是否相等。
not_equal_to 檢查傳遞的兩個引數是否不相等。
greater 檢查第一個引數是否大於第二個。
less 檢查第一個引數是否小於第二個。