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

posts - 18,  comments - 104,  trackbacks - 0
先看看boost的實現吧。

 1 template<typename _T>
 2 struct wapper
 3 {};
 4 template <typename _T>
 5 _T&(* fun1(wapper<_T> t))();
 6 true_type fun1();
 7 
 8 class true_type{};
 9 class false_type
10 {
11     char c[8];
12 };
13 
14 template<typename _T>
15 true_type fun2(_T&(*)());
16 false_type fun2();
17 
18 template<typename _T>
19 struct is_reference
20 {
21     static const bool value = sizeof(fun2(fun1(wapper<_T>()))) == sizeof(false_type);
22 };


就是上面這個樣子,我做了一下簡化,更容易理解。

下面是我的實現版本,最后再解釋。

 1 template<typename _T>
 2 class is_reference
 3 {
 4     template<typename _T>
 5     struct wapper
 6     {};
 7 
 8     class true_type{};
 9     class false_type
10     {
11         char c[8];
12     };
13 
14     template <typename _T>
15     static _T& fun1(wapper<_T>);
16     static true_type fun1();
17 
18     template<typename _T>
19     static true_type fun2(_T);
20     static false_type fun2(true_type);
21 public:
22     static const bool value = sizeof(fun2(fun1(wapper<_T>()))) == sizeof(false_type);
23 };

用法如下:

1 bool res1 = is_reference<char>::value;   //res1 == false
2 bool res2 = is_reference<char&>::value;  //res2 == true

函數參數會自動去掉引用比如:
template<_T> void fun(_T a);
無論任何時候,_T總是非引用類型。

但是不讓函數通過函數參數直接推導模板參數的類型,就給函數參數加一個間接層wapper,
類模板不會自動去掉引用,所以配合函數模板可以保證得到原來的類型。
 
template<_T> void fun(wapper<_T> a);
這時候,_T 就可能是引用類型了。因為c++不支持引用的引用,當模板函數中要用到引用的引用的時候,模板函數就會推導失敗。
即,只要在函數fun的參數或者返回值里面含有_T&的話,fun就會推導失敗。從而編譯器會選擇 true_type fun(...);
由于參數已經被用于推導模板參數,所以只能在返回類型中含有_T&,從而利用函數重載而區分引用和非引用。
如果直接返回_T&類型,后面必須要定義只接受true_type類型參數的函數進行區分,因為_T&肯定是引用類型,所以后面接受
false_type fun2(true_type)的函數會被選擇。

但是遇到is_reference<true_type>::value怎么辦,我把他們都放到私有域了,永遠不會看到的,搞定。
boost::trait中返回函數指針的解法也OK。因為char永遠不可能成功匹配函數指針。

此方法的關鍵在于編譯器選擇重載函數的先后順序。
而boost::trait中的方法是char永遠不能轉化成一個函數指針,從而選擇不同重載版本。

解釋完畢。
posted on 2009-02-20 21:44 尹東斐 閱讀(2141) 評論(5)  編輯 收藏 引用

FeedBack:
# re: boost::trait::is_reference 的研究與修改
2009-02-20 21:48 | 發生地方
不錯,不錯  回復  更多評論
  
# re: boost::trait::is_reference 的研究與修改[未登錄]
2009-02-21 09:27 | jans2002
高手,總覺得模板很玄乎,也沒有好的調試手段  回復  更多評論
  
# re: boost::trait::is_reference 的研究與修改
2009-02-21 10:35 | 尹東斐
@jans2002

模板現在是不好調試,不過好像VC 10的 intellisence 會有幫助吧。 還沒有用過。

我目前的水平主要還是自己推,不知道大牛們玩模板是不是和咱寫程序一樣輕松。。。  回復  更多評論
  
# re: boost::trait::is_reference 的研究與修改
2009-04-21 12:10 | SL
為何要過濾true_type?
true_type 一樣是個 type, 似乎沒有必要如此.

  回復  更多評論
  
# re: boost::trait::is_reference 的研究與修改
2009-04-21 23:24 | yindf
@SL

is_reference<true_type>::value
被使用時,fun1的第一個版本會被選擇,因為T被推導成true_type,所以最終結果是is_reference<true_type>::value == true,這是不對的。  回復  更多評論
  
<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

常用鏈接

留言簿(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>
            国内外成人在线| 久热精品在线视频| 国产精品日韩欧美一区二区| 夜夜嗨av一区二区三区中文字幕 | 午夜精品久久久久久久久 | 欧美 日韩 国产一区二区在线视频 | 久热这里只精品99re8久| 亚洲国产毛片完整版| 亚洲三级免费| 欧美午夜宅男影院| 欧美在线综合| 免费成人黄色片| 亚洲综合三区| 久久视频在线视频| 亚洲色诱最新| 欧美怡红院视频| 亚洲精品一区二区三区不| 在线亚洲欧美| 狠久久av成人天堂| 永久域名在线精品| 亚洲专区在线| 久久久久久久久久久一区| 亚洲精品一区二区三区不| 亚洲一区二区三区精品动漫| 黄色在线一区| 一区二区三区高清不卡| 黄色日韩精品| 亚洲自拍偷拍网址| 日韩一区二区精品在线观看| 亚洲欧美国产日韩天堂区| 亚洲精选在线| 久久精品亚洲精品国产欧美kt∨| 日韩一级二级三级| 久久不射中文字幕| 亚洲欧美日韩一区二区| 免费在线看一区| 久久久www成人免费精品| 欧美日韩在线播| 欧美成人免费大片| 国产日韩欧美在线| 亚洲图片欧美日产| 日韩视频在线一区二区| 久久精彩免费视频| 欧美在线视频一区二区| 欧美日韩亚洲一区三区| 欧美成人精品| 黄色亚洲精品| 久久精品国产一区二区三| 午夜精品久久久久久| 欧美日韩网站| 亚洲精品久久久久中文字幕欢迎你| 国产一区三区三区| 亚洲一区视频| 亚洲欧美日韩综合国产aⅴ| 欧美日韩二区三区| 亚洲黄色一区二区三区| 亚洲黄网站在线观看| 麻豆免费精品视频| 免费不卡亚洲欧美| 伊人久久综合97精品| 久久久久久久精| 久久综合伊人77777蜜臀| 国产一区二区三区日韩欧美| 午夜精品一区二区三区在线视 | 欧美高清日韩| 亚洲欧洲偷拍精品| 欧美国产欧美综合| 99国产一区| 亚洲综合色丁香婷婷六月图片| 欧美日韩亚洲高清一区二区| 99精品国产高清一区二区| 亚洲影视九九影院在线观看| 国产精品爱啪在线线免费观看| 夜夜嗨av一区二区三区中文字幕 | 国产精品毛片高清在线完整版| 中文亚洲欧美| 久久九九久精品国产免费直播| 国产色爱av资源综合区| 久久久久久久综合色一本| 蜜臀av性久久久久蜜臀aⅴ| 亚洲精品免费在线| 欧美日韩在线视频一区| 欧美 日韩 国产在线| 一区二区三区你懂的| 欧美黄色片免费观看| 亚洲精品在线一区二区| 亚洲欧美日韩天堂一区二区| 国产九九视频一区二区三区| 欧美一区午夜精品| 亚洲国产精品久久人人爱蜜臀| 亚洲免费观看在线观看| 国产精品视频网站| 久久精品九九| 亚洲美女av网站| 久久久久久69| 一区二区三区波多野结衣在线观看| 国产精品五区| 免费观看在线综合色| 亚洲一区二区三区高清| 毛片基地黄久久久久久天堂| 一区二区三区回区在观看免费视频| 国产欧美亚洲一区| 麻豆精品一区二区av白丝在线| 一区二区av在线| 狼人天天伊人久久| 亚洲无吗在线| 亚洲高清自拍| 国产精品专区h在线观看| 美女图片一区二区| 亚洲欧美大片| 亚洲美女精品成人在线视频| 久久久久久久97| 亚洲一区视频| 亚洲六月丁香色婷婷综合久久| 国产精品羞羞答答xxdd| 欧美精品一区在线发布| 久久精品视频va| 亚洲一本视频| 亚洲精品一区在线观看香蕉| 噜噜噜噜噜久久久久久91| 午夜免费日韩视频| av不卡在线| 1000精品久久久久久久久| 国产日韩在线一区| 国产精品久久| 欧美午夜电影一区| 欧美激情国产日韩| 男女精品视频| 狂野欧美一区| 久久久久久黄| 久久久中精品2020中文| 欧美一区二区三区在线播放| 亚洲一区二区三区高清不卡| 亚洲巨乳在线| 亚洲精品之草原avav久久| 亚洲欧洲综合| 亚洲精品1区2区| 亚洲国产日韩欧美在线图片| 另类国产ts人妖高潮视频| 久久久人成影片一区二区三区观看 | 韩国福利一区| 国产一区二区三区久久久久久久久| 国产精品三级视频| 国产伦精品一区二区三区高清| 国产精品久久久久久久一区探花 | 国产一区二区三区久久精品| 国产视频在线一区二区| 国产日韩欧美视频在线| 国产日韩欧美日韩大片| 亚洲影院色在线观看免费| 亚洲视频图片小说| 亚洲一区二区三区久久| 亚洲欧美激情一区| 欧美一区二区啪啪| 久久久国产精品一区| 久久亚洲影院| 亚洲第一精品在线| 亚洲老板91色精品久久| 一区二区三区你懂的| 午夜精品福利电影| 久久久精品999| 欧美激情在线有限公司| 欧美日韩一区二区三区在线观看免| 欧美日韩在线不卡| 好吊色欧美一区二区三区四区| 亚洲国产日韩精品| 亚洲色在线视频| 久久久久国产精品www| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲国产高清一区| 一区二区三区福利| 久久av一区二区三区漫画| 免费成人性网站| 99视频热这里只有精品免费| 午夜精品久久久99热福利| 老牛影视一区二区三区| 欧美午夜精品理论片a级按摩| 狠狠色丁香婷综合久久| 99国产精品国产精品毛片| 欧美永久精品| 亚洲欧洲精品一区二区| 午夜精品久久久久影视| 免费在线播放第一区高清av| 国产精品乱子久久久久| 亚洲激情在线激情| 欧美一区二区视频在线观看| 亚洲国产老妈| 欧美一区激情| 国产精品久久国产精品99gif| ●精品国产综合乱码久久久久| 亚洲资源在线观看| 最新69国产成人精品视频免费| 午夜亚洲视频| 欧美日韩在线观看视频| 亚洲精品黄色| 久久婷婷影院| 亚洲自拍偷拍麻豆| 国产精品videosex极品| 日韩视频免费大全中文字幕| 老司机精品视频一区二区三区|