青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 18,  comments - 104,  trackbacks - 0

上次說到在假設類型int下,成功的實現(xiàn)了一個“lambda”,這次,當然不能還在int的假設下了。我們的武器就是模板,說起來模板,話就長了。
這里略過,講重點。

這是上次最后的代碼,為了方便描述,再貼一份。

 1 struct op
 2 {
 3     op(int i)
 4         : _i(i)
 5     {}
 6 
 7     int _i;
 8 
 9     int operator()(int& i)
10     {
11         i = _i;
12     }
13 };
14 
15 struct place_holder
16 {
17     op operator=(int i)
18     {
19         return op(i)
20     }
21 };
22 
23 place_holder _1;
24 
25 for_each(v.begin(), v.end(), _1 = 3);


要去掉對int的依賴,先仔細想想對int的依賴都在哪里?說明白點就是整個程序,哪里都有int?
1.  op的構造函數(shù)參數(shù)是int
2.  op里面的成員變量 _i的類型是int
3.  op的operator() 的返回值和參數(shù)都有int
4.  place_holder的operator=的參數(shù)是int

當然 vector<int> 也有int,但這個不算 :)

總的來說,int和 一個變量 int op::_i, 三個函數(shù) op::op(int i), op::operaator(int& i) 和 place_holder::operator=(int) 有關系,這一點很重要,類和函數(shù)在泛型中的作用不一樣,
看看 http://www.shnenglu.com/yindf/archive/2009/02/20/74397.html 中說的類模板和函數(shù)模板的區(qū)別吧。

再細分一點,和 _1 有關的int就只有op::operator()一個,其他都和 _1 沒關系。
剩下的都和 3 有關系,想想 3 的傳遞路徑, 從 place_holder::operator = 到 op::op(int i), 再到 op::_i。

也就是說op::operator()要一個獨立的模板參數(shù)。
想想看,其實op::op(int i) 和 op::_i 是一個東西,構造函數(shù)就是為了初始化這個變量。所以這里選擇泛化整個op,就是說構造函數(shù)的參數(shù)和變量是同一個類型。
對于place_holder::operator =, 是要泛化整個place_holder呢,還是只泛化place_holder::operator=呢,當然泛化函數(shù),因為類不會進行類型推導。
意思是如果泛化類的話,你就要有為無數(shù)類型特化過的place_holder,這里很難理解,不理解的話,繼續(xù)看下去吧。

現(xiàn)在就開始實做吧。

 1 template <typename _U>
 2 struct op
 3 {
 4     op(_U i)
 5         : _i(i)
 6     {}
 7 
 8     _U _i;
 9 
10     template<typename _T>
11     _T& operator()(_T& i)
12     {
13         i = _i;
14     }
15 };
16 
17 struct place_holder
18 {
19     template <typename _T>
20     op<_T> operator=(_T i)
21     {
22         return op<_T>(i)
23     }
24 };
25 
26 place_holder _1;
27 
28 for_each(v.begin(), v.end(), _1 = 3);


好了,泛化完成。難道就這么簡單?事實就是這么簡單。
來分析一下模板推導的過程吧,  _1 = 3 調用,從下面這個函數(shù)開始,

1 template <typename _T>
2 op<_T> place_holder::operator=(_T i);


那么這個_T 被推導為 int, 然后返回一個 op<int>, 然后 op<int> 里面就有一個 int op<int>::_i;

于是,在for_each里面,相當于有這么一句:

1 op<int> p;
2 p(*iter);

op的模板參數(shù)被推定義為int了(不是推導的,類模板不會推導)。

所以手法是先靠函數(shù)推導模板參數(shù),再靠類保存類型信息。

于是,下面的函數(shù)模板

1 template<typename _T>
2 _T& op<int>::operator()(_T& i)
3 {
4     i = _i;
5 }


的模板參數(shù) _T 就被推導成 *iter 的類型了,也就是容器的 value_type 了。

好了,到現(xiàn)在,一個賦值的lambda就做好了,它還能這么用:

1 double x;
2 (_1 = 5)(x);

就給x賦值5了,神奇吧。
因為  (_1 = 5)返回的是個lambda表達式,也就是個仿函數(shù),:)

現(xiàn)在才看到lambda核心的一小部分,已經讓人感覺眩暈了。
看看現(xiàn)在還存在的問題,只實現(xiàn)了一個賦值操作,其他的呢? 下篇繼續(xù)。。。

posted on 2009-02-20 19:21 尹東斐 閱讀(1062) 評論(5)  編輯 收藏 引用 所屬分類: 深入探索 boost::lambda 系列

FeedBack:
# re: 深入探索 boost::lambda 系列(二)
2009-02-20 21:51 | 發(fā)生地方
貌似比較復雜啊  回復  更多評論
  
# re: 深入探索 boost::lambda 系列(二)[未登錄]
2009-02-21 08:27 | cppexplore
頂博主
多發(fā)寫相關的東西啊
坐下來慢慢看  回復  更多評論
  
# re: 深入探索 boost::lambda 系列(二)
2009-02-23 15:23 | luke
博主研究c++想必有多年的功力了吧,支持一下!!!  回復  更多評論
  
# re: 深入探索 boost::lambda 系列(二)
2010-10-14 15:55 | 匿名
Great!崇拜一下!  回復  更多評論
  
# re: 深入探索 boost::lambda 系列(二)
2012-11-05 17:04 | 匿名
為什么op類的模板參數(shù)和operator()的模板參數(shù)需要兩個呢?為什么op::operator()也需要十個模板函數(shù)呢?  回復  更多評論
  
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(4)

隨筆檔案

文章分類

文章檔案

相冊

好友博客

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品乱码久久久久久蜜桃麻豆| 日韩视频在线播放| 亚洲欧美影音先锋| 国产精品揄拍500视频| 午夜视频在线观看一区二区三区 | 国产伦精品一区二区三区高清| 亚洲午夜久久久久久久久电影网| 91久久精品国产| 欧美日韩国产一级片| 亚洲一区二区动漫| 亚洲欧美成人一区二区三区| 国产欧美一区二区色老头| 久久精品视频免费观看| 久久久蜜桃精品| 亚洲精品久久7777| 在线一区二区三区四区| 国产欧美日韩视频| 欧美成人免费大片| 欧美日韩国产黄| 久久成人av少妇免费| 久久久av网站| 亚洲视频中文| 欧美一区国产二区| 99精品久久| 亚洲欧美日韩在线不卡| 亚洲欧洲在线播放| 亚洲视屏在线播放| 在线观看欧美黄色| 一本到12不卡视频在线dvd| 国产一本一道久久香蕉| 亚洲激情精品| 国产一区二区精品久久91| 欧美韩日视频| 国产欧美日韩视频在线观看| 欧美国内亚洲| 国产有码一区二区| 99re8这里有精品热视频免费| 国产日韩欧美精品综合| 亚洲美女尤物影院| 伊人久久婷婷| 午夜精品影院在线观看| 99人久久精品视频最新地址| 香蕉久久国产| 亚洲主播在线观看| 欧美激情片在线观看| 久久男女视频| 国产精品一区二区久久久| 亚洲人成绝费网站色www| 国产在线精品一区二区夜色| 夜久久久久久| 9色精品在线| 久久九九99| 欧美一区二区三区久久精品茉莉花| 欧美成人一区二区三区| 久色婷婷小香蕉久久| 国产精品爽黄69| av成人天堂| 在线一区二区三区做爰视频网站| 久热精品视频在线| 狂野欧美激情性xxxx欧美| 国产区亚洲区欧美区| 亚洲永久免费| 亚洲综合99| 国产精品va在线播放| 亚洲免费黄色| 亚洲视频二区| 欧美午夜大胆人体| 一区二区三区精品久久久| 宅男噜噜噜66国产日韩在线观看| 欧美激情视频网站| 亚洲人www| 夜夜嗨网站十八久久| 欧美精品国产一区| 日韩一区二区高清| 亚洲在线视频网站| 国产精品视频专区| 久久aⅴ国产紧身牛仔裤| 久久久久一本一区二区青青蜜月| 国产日韩欧美一二三区| 欧美一级精品大片| 免费日韩av片| 亚洲精品免费在线| 欧美日韩一区二区三区在线看| 亚洲毛片在线看| 亚洲欧美视频一区二区三区| 国产精品每日更新| 欧美一区影院| 欧美韩国日本一区| 亚洲午夜激情网站| 国产精品乱人伦中文| 欧美一区二区视频97| 欧美粗暴jizz性欧美20| 日韩亚洲精品电影| 国产精品日本精品| 欧美在线地址| 亚洲精品看片| 欧美一区二区福利在线| 一区二区在线视频| 欧美日韩亚洲一区三区| 亚洲欧美日韩精品久久| 欧美成人在线免费视频| 国产精品99久久99久久久二8| 国产精品久久九九| 久久久水蜜桃| 一区二区三区.www| 看片网站欧美日韩| 亚洲一区二区三区四区五区午夜 | 欧美日韩a区| 亚洲欧美视频在线观看| 欧美成人中文字幕| 亚洲欧美日本国产有色| 在线观看视频欧美| 国产精品乱人伦一区二区| 久久综合久久综合久久| 在线性视频日韩欧美| 欧美成人一区二区| 久久av红桃一区二区小说| 亚洲裸体俱乐部裸体舞表演av| 国产精品亚洲综合天堂夜夜| 猛干欧美女孩| 欧美亚洲日本一区| 一本久道久久久| 亚洲高清视频一区| 久久欧美中文字幕| 欧美一区二区视频在线观看2020 | 欧美精品在线播放| 久久久女女女女999久久| 一区二区欧美视频| 亚洲激情欧美激情| 欧美激情第3页| 久久久久久夜精品精品免费| 亚洲香蕉成视频在线观看| 在线播放中文一区| 狠狠操狠狠色综合网| 国产精品一级| 国产精品美女久久久| 欧美日产在线观看| 欧美久久久久久蜜桃| 另类综合日韩欧美亚洲| 久久久www| 香蕉久久精品日日躁夜夜躁| 亚洲免费在线观看| 亚洲线精品一区二区三区八戒| 亚洲麻豆av| 亚洲免费观看高清在线观看| 91久久精品久久国产性色也91 | 亚洲精品小视频| …久久精品99久久香蕉国产| 国产日韩欧美一区| 国产麻豆精品theporn| 国产精品一区视频| 国产欧美日韩亚洲精品| 国产欧美另类| 国产一区二区三区黄| 国产综合色产| 1769国产精品| 亚洲精品日韩综合观看成人91| 91久久嫩草影院一区二区| 亚洲欧洲在线视频| 在线视频你懂得一区| 亚洲午夜精品网| 午夜久久tv| 久热爱精品视频线路一| 欧美国产日韩精品| 亚洲美女黄色片| 亚洲图片在线| 久久国产夜色精品鲁鲁99| 久久婷婷国产麻豆91天堂| 欧美大片免费| 国产精品扒开腿做爽爽爽软件| 国产精品午夜春色av| 国内一区二区三区在线视频| 亚洲国产成人精品久久| 一区二区三区日韩| 欧美一区二区三区在线播放| 久久夜色精品国产噜噜av| 欧美韩国在线| 亚洲视频在线播放| 久久视频这里只有精品| 欧美日本高清| 国产一区二区成人| 亚洲精品乱码久久久久久黑人| 亚洲尤物在线视频观看| 久久伊人免费视频| 日韩午夜av电影| 欧美一区二区三区免费在线看| 免费人成精品欧美精品| 国产精品爽爽ⅴa在线观看| 在线色欧美三级视频| 午夜精品久久久久久久久久久| 老**午夜毛片一区二区三区| 日韩亚洲欧美一区| 久久久国产亚洲精品| 国产精品毛片va一区二区三区 | 欧美小视频在线观看| 伊人久久大香线蕉综合热线| 在线视频精品| 欧美国产日韩一二三区| 欧美亚洲一区在线| 欧美婷婷六月丁香综合色|