仿函式:
仿函式又名函式物件:
1、呼叫者:可以像函式一樣被呼叫;
2、被呼叫者:以物件所定義的function call operator扮演函式的實質角色
仿函式的主要作用:
以tempplate引數指定你要採取的策略。以sort()為例,其第乙個版本是以operator < 為排序時的元素位置調整依據,第二個版本則允許使用者指定任何「操作」,務求排序後的兩兩相鄰元素都能操作結果為true。
要將某種「操作」當做演算法的引數
1、乙個辦法就是先將該「操作」設計為乙個函式,再將函式指標當做演算法的乙個引數;
2、將該「操作」設計為乙個所謂的仿函式(就語言層面而言是個class),再以該仿函式產生乙個物件,並以此物件作為演算法的乙個引數。
既然函式指標可以達到「將整組操作當做演算法的引數」,那又何必有所謂的仿函式呢?原因在於函式指標不能滿足stl對抽象性的要求,也不能滿足軟體積木的要求---函式指標無法和stl其他元件(如配接器)搭配,產生更靈活的變化。
仿函式其實就是「行為類似函式」的物件,為了能夠「行為類似函式」,其類別定義中必須自定義(或說改寫、過載)function call 運運算元(operator())。擁有這樣的運運算元後我們就可以在仿函式的後面加上一對小括號,以此呼叫仿函式所定義的operator()。
像這樣:
#include#includeusing namespace std;
int main()
{ //greaterig;
cout<()(6,4);
cout仿函式的相應型別主要用來表現函式引數型別和傳回值型別。為了方便起見stl定義了兩個classes,分別代表一元仿函式和二元仿函式,其中沒有任何data member或member functions,唯有一些相應型別定義,任何仿函式,只要依個人需求選擇繼承其中乙個class,便自動擁有了那些相應型別,也就自動擁有了配接能力。
stl仿函式的分類
1、若以運算元的個數來劃分,可分為一元和二元仿函式;
2、若以功能劃分,可分為算術運算、關係運算、邏輯運算。
python 仿函式 C 仿函式
c 的標準庫stl裡面有6大部件,其中之一為仿函式。初始看到這一名字可能讓人摸不著頭腦 函式倒是挺容易理解,何故又起個仿函式的名字呢?本文將帶你揭開它看起來挺讓人迷惑但是實際上很簡單的面紗。仿函式,看名字就知道它肯定和函式有什麼關聯,但是也肯定和函式有什麼區別。函式主要是一塊接收輸入引數然後按照一定...
仿函式 C 中仿函式的應用
仿函式 c 中仿函式的應用 在使用仿函式的時候,主要用到以下兩種 一種是以基類std unary function派生出來的派生類 另一種是以基類std binary function派生出來的派生類。而這兩種有什麼區別呢?它們之間的區別只是第一種接收的引數個數為乙個,而第二種接收的引數的個數為兩個...
004內建的仿函式 算術仿函式
概念 stl內建了一些函式物件 分類 算術仿函式 關係仿函式 邏輯仿函式 用法 這些仿函式所產生的物件,用法和一般函式完全相同 使用內建函式物件,需要引入標頭檔案 include.3.2 算術仿函式 功能描述 實現四則運算 其中negate是一元運算,其他都是二元運算 仿函式原型 templatet...