這期內容當中小編將會給大家?guī)碛嘘P如何淺析C++仿函數(shù)的基本概念,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)主要從事網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務墨脫,十多年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18982081108
C++編程語言為我們帶來了非常大的好處。不過即使是我們經(jīng)常使用的功能也有很多比較高深的內容值得我們去深入的探討。在這里我們將會為大家詳細介紹一下C++仿函數(shù)的基本概念,方便大家對這一語言的解讀。
C++仿函數(shù)這個詞經(jīng)常會出現(xiàn)在模板庫里(比如 STL),那么什么是仿函數(shù)呢?
顧名思義:仿函數(shù)就是能像函數(shù)一樣工作的東西,請原諒我用東西這樣一個代詞,下面我會慢慢解釋。
void dosome( int i )
這個 dosome 是一個函數(shù),我們可以這樣來使用它: dosome(5);
那么,有什么東西可以像這樣工作么?
答案1:重載了 () 操作符的對象,比如:
struct DoSome { void operator()( int i ); } DoSome dosome;
這里類(對 C++ 來說,struct 和類是相同的) 重載了 () 操作符,因此它的實例 dosome 可以這樣用 dosome(5); 和上面的函數(shù)調用一模一樣,不是么?所以 dosome 就是一個C++仿函數(shù)了。
實際上還有答案2:
函數(shù)指針指向的對象。
typedef void( *DoSomePtr )( int ); typedef void( DoSome )( int ); DoSomePtr *ptr=&func; DoSome& dosome=*ptr; dosome(5); // 這里又和函數(shù)調用一模一樣了。
當然,答案3 成員函數(shù)指針指向的成員函數(shù)就是意料之中的答案了。
C++仿函數(shù)的用處
不管是對象還是函數(shù)指針等等,它們都是可以被作為參數(shù)傳遞,或者被作為變量保存的。因此我們就可以把一個仿函數(shù)傳遞給一個函數(shù),由這個函數(shù)根據(jù)需要來調用這個仿函數(shù)(有點類似回調)。
STL 模板庫中,大量使用了這種技巧,來實現(xiàn)庫的“靈活”。 比如: for_each, 它的源代碼大致如下:
template < typename Iterator, typename Functor > void for_each( Iterator begin, Iterator end, Fucntor func ) { for( ; begin!=end; begin++ ) func( *begin ); }
這個 for 循環(huán)遍歷了容器中的每一個元素,對每個元素調用了仿函數(shù) func,這樣就實現(xiàn)了 對“每個元素做同樣的事”這樣一種編程的思想。 特別的,如果仿函數(shù)是一個對象,這個對象是可以有成員變量的,這就讓C++仿函數(shù)有了“狀態(tài)”,從而實現(xiàn)了更高的靈活性。
上述就是小編為大家分享的如何淺析C++仿函數(shù)的基本概念了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。