函式物件 Function Objects

2022-09-18 05:12:22 字數 1010 閱讀 2740

函式物件(function objects)

前言:在前面討論函式的彈性設計時,我們介紹了通過函式指標的方式來擴充套件函式的彈性,在此,基於同樣的目的我們引入函式物件這個概念。

1.定義:

函式物件顧名思義,是行為類似函式的物件;

class absint

}像世間萬物一樣,函式物件有共性也有個性,所有函式物件的共性是,都過載了呼叫操作符(如上所示),其個性是不同的函式物件定義了執行不同操作的呼叫操作符,如plus過載了執行+操作符的呼叫操作符,equal_to過載了執行==的呼叫操作符,這樣做的效果是這個類的物件可以像函式一樣使用。

如:int i=-42;

absint absobj;

int ui=absobj(i);

最終ui值為42;

2.使用:

函式物件的使用場合主要是指定泛型演算法的條件,即覆蓋標準庫中演算法使用的預設操作符,標準庫中定義了一組算術,關係與邏輯運算子物件的函式物件,

使用舉例:

> 對應的函式物件:greater;

sort() 函式預設操作符: <

預設情況下sort()實現乙個公升序的效果;

將greater函式物件傳入sort();

sort(vec.begin(),vec.end(),greater);

這樣通過依次呼叫greater(val1, val2),從而實現降序排列的效果;

其他操作符函式物件的使用可以依次類推,在此不一一枚舉;

3.意義:

函式物件從功能上與函式指標相同,均以擴充套件演算法彈性為目的,可以覆蓋預設操作符。這樣有人就有疑問了,那為何還有引入函式物件,**晦澀,而且要過載函式呼叫操作符,強制的使類物件表現為函式的特點,豈不是畫蛇添足,多此一舉?

大錯哉!實際上引入函式物件好處多多,從效率上來講,函式物件中的函式為內聯函式,消除了通過函式指標呼叫函式時需要付出的額外代價,提公升了**效率;

另外,標準庫提供了大量的函式物件供我們使用,通過和標準庫的泛型演算法結合使用,從對元素的底層操作方式的層次上大大擴充套件泛化的層次。

函式物件 函式符

函式物件 函式符 很多stl演算法都使用函式物件,也叫函式符 functor 函式符是以函式方式與 結合使用的任意物件,如函式名 指向函式的指標 過載了 運算子的類物件 函式符概念 1.生成器 generator 是不用引數就可以呼叫的函式符 2.一元函式 unary function 是用乙個引數...

STL 函式物件 謂詞 預定義函式物件 函式介面卡

過載函式呼叫操作符的類,其物件常稱為函式物件 function object 即它們是行為類似函式的物件,也叫仿函式 functor 其實就是過載 操作符,使得類物件可以像函式那樣呼叫。注意 函式物件 仿函式 是乙個類,不是乙個函式。函式物件 仿函式 過載了 操作符使得它可以像函式一樣呼叫。分類 假...

c 之函式物件 謂詞 內建函式物件

函式物件概念 1 過載函式呼叫操作符的類,其物件稱為函式物件 2 函式物件使用過載的 時,行為類似與函式呼叫,也叫仿函式 本質 函式物件 仿函式 是乙個類,不是乙個函式 函式物件的使用 特點1 函式物件在使用時,可以向普通函式那樣呼叫,可以有引數,可以有返回值 2 函式物件超出普通函式的概念,函式物...