日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
C++仿函數(shù)基本概念淺析

C++編程語言為我們帶來了非常大的好處。不過即使是我們經(jīng)常使用的功能也有很多比較高深的內(nèi)容值得我們?nèi)ド钊氲奶接憽T谶@里我們將會(huì)為大家詳細(xì)介紹一下C++仿函數(shù)的基本概念,方便大家對(duì)這一語言的解讀。

C++仿函數(shù)這個(gè)詞經(jīng)常會(huì)出現(xiàn)在模板庫里(比如 STL),那么什么是仿函數(shù)呢?

顧名思義:仿函數(shù)就是能像函數(shù)一樣工作的東西,請(qǐng)?jiān)徫矣脰|西這樣一個(gè)代詞,下面我會(huì)慢慢解釋。

 
 
 
  1. void dosome( int i )  

這個(gè) dosome 是一個(gè)函數(shù),我們可以這樣來使用它: dosome(5);

那么,有什么東西可以像這樣工作么?

答案1:重載了 () 操作符的對(duì)象,比如:

 
 
 
  1. struct DoSome   
  2. {   
  3. void operator()( int i );   
  4. }   
  5. DoSome dosome;  

這里類(對(duì) C++ 來說,struct 和類是相同的) 重載了 () 操作符,因此它的實(shí)例 dosome 可以這樣用 dosome(5); 和上面的函數(shù)調(diào)用一模一樣,不是么?所以 dosome 就是一個(gè)C++仿函數(shù)了。

實(shí)際上還有答案2:

函數(shù)指針指向的對(duì)象。

 
 
 
  1. typedef void( *DoSomePtr )( int );   
  2. typedef void( DoSome )( int );   
  3. DoSomePtr *ptr=&func;   
  4. DoSome& dosome=*ptr;   
  5. dosome(5); // 這里又和函數(shù)調(diào)用一模一樣了。  

當(dāng)然,答案3 成員函數(shù)指針指向的成員函數(shù)就是意料之中的答案了。 #t#

C++仿函數(shù)的用處

不管是對(duì)象還是函數(shù)指針等等,它們都是可以被作為參數(shù)傳遞,或者被作為變量保存的。因此我們就可以把一個(gè)仿函數(shù)傳遞給一個(gè)函數(shù),由這個(gè)函數(shù)根據(jù)需要來調(diào)用這個(gè)仿函數(shù)(有點(diǎn)類似回調(diào))。

STL 模板庫中,大量使用了這種技巧,來實(shí)現(xiàn)庫的“靈活”。 比如: for_each, 它的源代碼大致如下:

 
 
 
  1. template < typename Iterator, typename Functor >   
  2. void for_each( Iterator begin, Iterator end, Fucntor func )   
  3. {   
  4. for( ; begin!=end; begin++ )   
  5. func( *begin );   

這個(gè) for 循環(huán)遍歷了容器中的每一個(gè)元素,對(duì)每個(gè)元素調(diào)用了仿函數(shù) func,這樣就實(shí)現(xiàn)了 對(duì)“每個(gè)元素做同樣的事”這樣一種編程的思想。 特別的,如果仿函數(shù)是一個(gè)對(duì)象,這個(gè)對(duì)象是可以有成員變量的,這就讓C++仿函數(shù)有了“狀態(tài)”,從而實(shí)現(xiàn)了更高的靈活性。


文章題目:C++仿函數(shù)基本概念淺析
轉(zhuǎn)載源于:http://m.5511xx.com/article/cdegeih.html