C 的STL介面卡的實現原理

2021-09-25 10:38:00 字數 1565 閱讀 5082

在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...