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

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

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

C++編程語言為我們帶來了非常大的好處。不過即使是我們經常使用的功能也有很多比較高深的內容值得我們去深入的探討。在這里我們將會為大家詳細介紹一下C++仿函數的基本概念,方便大家對這一語言的解讀。

C++仿函數這個詞經常會出現(xiàn)在模板庫里(比如 STL),那么什么是仿函數呢?

顧名思義:仿函數就是能像函數一樣工作的東西,請原諒我用東西這樣一個代詞,下面我會慢慢解釋。

 
 
 
  1. void dosome( int i )  

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

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

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

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

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

實際上還有答案2:

函數指針指向的對象。

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

當然,答案3 成員函數指針指向的成員函數就是意料之中的答案了。 #t#

C++仿函數的用處

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

STL 模板庫中,大量使用了這種技巧,來實現(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 );   

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


文章題目:C++仿函數基本概念淺析
文章位置:http://www.5511xx.com/article/cdegeih.html