c 學習 函式物件(仿函式)

2021-10-23 23:27:23 字數 1970 閱讀 8366

過載函式呼叫操作符「()」的類,其物件常稱為函式物件(function object),即它們是行為類似函式的物件,也叫仿函式(functor),其實就是過載「()」操作符,使得類物件可以像函式那樣呼叫。

注:1、函式物件(仿函式)是乙個類,不是乙個函式

2、函式物件(仿函式)過載了」()」操作符使得它可以像函式一樣呼叫。

函式物件可以像普通函式一樣呼叫。

函式物件可以像普通函式那樣接收引數。

函式物件超出了函式的概念,函式物件可以儲存函式呼叫的狀態(通過類內部成員實現)。

這是乙個仿函式,令其實現列印和儲存呼叫次數的功能:

struct myprint

void

operator()

(int val)

public

:int num;

};

我們在乙個vector中結合for_each使用它:

vector<

int> myvector;

myvector.

push_back(10

);myvector.

push_back(20

);myvector.

push_back(30

);myvector.

push_back(40

);myprint print;

//檢視for_each的定義可知,它返回乙個與print同型別的物件,且引數中print

//是拷貝過去的,而不是引用。

myprint print2=

for_each

(myvector.

begin()

,myvector.

end(

),print)

;cout<

//輸出0

cout<

//輸出4

謂詞是指普通函式或過載的operator()返回值是bool型別的函式物件(仿函式)。如果operator接受乙個引數,那麼叫做一元謂詞,如果接受兩個引數,那麼叫做二元謂詞,謂詞可作為乙個判斷式。

stl內建了一些函式物件。

分為:算數類函式物件,關係運算類函式物件,邏輯運算類仿函式。

這些仿函式所產生的物件,用法和一般函式完全相同,當然我們還可以產生無名的臨時物件來履行函式功能。

使用內建函式物件,需要引入標頭檔案#include

算數類函式物件

6個算數類函式物件,除了negate是一元運算,其他都是二元運算。

關係運算類函式物件

6個都是二元運算。

邏輯運算類仿函式

邏輯運算類運算函式,not為一元運算,其餘為二元運算。

繫結介面卡

將乙個二元函式物件轉變成一元函式物件。

取反介面卡

還有一些介面卡

C 學習筆記 (函式物件(仿函式))

先考慮乙個簡單的例子 假設有乙個vector,你的任務是統計長度小於5的string的個數,如果使用count if函式的話,你的 可能長成這樣 bool lengthislessthanfive const string str int res count if vec.begin vec.end...

C 函式物件 仿函式

概念 模仿函式的類,使用方式如同函式 本質 函式物件是乙個類,類中對小括號 進行了函式過載。仿函式主要用於stl中的演算法中,函式指標雖然也可以作為演算法的引數,但它不能滿足stl對抽象性的要求,也不能滿足軟體積木的要求 函式指標無法和stl其他元件搭配,產生更靈活變化。案例 如下 include ...

stl 仿函式 函式物件

定義 stl原始碼剖析 仿函式其實上就是乙個 行為類似函式 的物件。即主體是物件,只是使用起來像乙個函式。傳遞函式指標 templatebool compare to const t x,const t y templatevoid print compare t fun int main 傳遞的是...