在c++的演算法中,每個仿函式,都必須要繼承binary_function 或者unary_function這兩個類, 這兩個函式都是定義typedef定義;
這裡可以看原始碼;
templatestruct binary_function
;
templatestruct unary_function
;
他們的主要做用是為每乙個不同的仿函式的設定項同的型別標誌,以便後面的模板函式或者模板類使用時可以直接用型別標誌呼叫,而不必使用者自己關心;怎麼說可以不能理解, 但是通過原始碼你就可以理解這種設計思路多好;
我先將實現的源**貼出來;
# define _crt_secure_no_warnings
# include # include # include using namespace std;
//定義另乙個類模板,即是仿函式, 可以做比大小之用;
template struct mygreater : public binary_function//繼承二元函式,指定類模板的型別;
};template class binder2nd : public unary_function
result_type operator()(const first_type & valuepassbyalgorithm) const
protected:
functortype functorobject;//接受橋梁函式傳遞過來的函式物件了;
second_type bindvalue;//接收繫結值;
};//這裡設計有乙個技巧;用了函式的型別自動推導, 具體的後面說;
template inline binder2ndbind2nd(const functortype & functorobject, const bindtype & bindvalue)
//這裡的模式和上面的bind2nd基本是一致的,
template class negator : public unary_function
bool operator()(const typename functortype::argument_type & valuepassbyalgorithm) const
protected:
functortype functorobject;
};template inline negatornot1(const functortype & functorobject)
void run01(void)
auto num = count_if(v.begin(), v.end(), not1(bind2nd(mygreater(), 500)));
cout << "num = " << num << endl;
}int main(int argc, char ** ar**)
上面的實現基本思路是通過橋梁函式判斷型別, 後定義乙個類, 用型別巢狀的型別定義相關的成員變數, 後再累中過載()
然後在這裡過載函式中是實現繫結或者否定;
STL 介面卡實現
函式介面轉函式物件介面的介面卡 內部呼叫引數為指標型別 template class const mem fun t public unary function ret operator const tp p const private ret tp m f const const函式介面轉函式物件...
STL介面卡 函式介面卡
有時候需要對內建函式物件返回值進行進一步的簡單計算,或者填上多餘的引數,不能直接代入演算法。函式介面卡實現了這一功能,函式介面卡是將一種函式物件轉化為另一種符合要求的函式物件。函式介面卡可以分為4個大類 繫結介面卡 組合介面卡 指標函式介面卡和成員函式介面卡。需求 在遍歷容器的時候,將容器中的值全部...
STL中的介面卡
選擇自 sevecol 的 blog 我們知道在stl中函式物件發揮著很大作用 find if coll.begin coll.end bind2nd greater 42 這裡bind2nd就是乙個函式物件,他提供了operator 的處理,是的我們可以象呼叫函式一樣操作,這也就是他名字的由來.f...