C++:21---仿函数
什么是仿函數(shù)
所謂的仿函數(shù)(functor),是通過重載()運(yùn)算符模擬函數(shù)形為的類。
因此,這里需要明確兩點(diǎn):
1 仿函數(shù)不是函數(shù),它是個(gè)類;
2 仿函數(shù)重載了()運(yùn)算符,使得它的對(duì)你可以像函數(shù)那樣子調(diào)用(代碼的形式好像是在調(diào)用函數(shù))。
假設(shè)有一個(gè)vector<string>,你的任務(wù)是統(tǒng)計(jì)長度小于20的字符串的個(gè)數(shù),如果使用count_if函數(shù)的話,你的代碼可能長成這樣:
#define STR_LEN 20 bool LengthIsLess(const string& str) { return str.length()<STR_LEN; } int res=count_if(vec.begin(), vec.end(), LengthIsLess);其中count_if函數(shù)的第三個(gè)參數(shù)是一個(gè)函數(shù)指針,返回一個(gè)bool類型的值。
如果修改LengthIsLess這個(gè)函數(shù)原型,將原來的宏定義通過參數(shù)傳進(jìn)來呢:
bool LengthIsLess(const string& str, int len)
但是他不能滿足count_if函數(shù)的參數(shù)要求:count_if要求的是僅帶有一個(gè)參數(shù)。怎么樣找到以上兩個(gè)函數(shù)的一個(gè)折中的解決方案呢?
有三種解決方案可以考慮:
1、函數(shù)的局部變量;
局部變量不能在函數(shù)調(diào)用中傳遞,而且caller無法訪問。
2、函數(shù)的參數(shù);
這種方法我們已經(jīng)討論過了&#x
總結(jié)
以上是生活随笔為你收集整理的C++:21---仿函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网游服务器端设计思考:心跳设计
- 下一篇: C++:49---继承中的友元