C++ 中的函子

Muhammad Husnain 2023年10月12日
  1. C++ 中的函子簡介
  2. C++ 中帶引數的函子
  3. 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 檢查第一個引數是否小於第二個。
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn