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

posts - 18,  comments - 104,  trackbacks - 0
先看看boost的實現(xiàn)吧。

 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 };


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

下面是我的實現(xiàn)版本,最后再解釋。

 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

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

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

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

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

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

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

模板現(xiàn)在是不好調試,不過好像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>
            国产精品ⅴa在线观看h| 亚洲国产精品电影| 久久av资源网| 小黄鸭精品密入口导航| 午夜精品亚洲一区二区三区嫩草| 亚洲一区日韩在线| 亚洲欧美日韩一区在线观看| 欧美一级二级三级蜜桃| 久久国产精品99久久久久久老狼| 久久久久久9| 欧美国产精品日韩| 欧美无乱码久久久免费午夜一区| 国产乱码精品| 亚洲国产欧美一区二区三区同亚洲| 亚洲日本电影| 亚洲专区在线视频| 久色成人在线| 亚洲精选一区二区| 亚洲欧美视频在线观看| 久久色在线播放| 欧美三级特黄| 黄色小说综合网站| 制服丝袜激情欧洲亚洲| 久久精品国产亚洲aⅴ| 蜜臀av在线播放一区二区三区| 亚洲精品欧美在线| 久久久久综合一区二区三区| 欧美日韩一区二区三区在线观看免| 国产欧美一区二区视频| 亚洲国产91| 亚洲欧美精品suv| 欧美国产丝袜视频| 亚洲欧美自拍偷拍| 欧美日韩亚洲视频| 伊人夜夜躁av伊人久久| 亚洲综合另类| 亚洲欧洲在线播放| 亚洲一区二区三区精品视频 | 欧美一区二区三区男人的天堂 | 欧美午夜精品一区| 亚洲国产mv| 久久精品国产综合| 一级成人国产| 欧美电影免费观看网站| 伊人狠狠色j香婷婷综合| 午夜精品福利一区二区蜜股av| 亚洲国产99精品国自产| 久久精品视频免费播放| 国产婷婷一区二区| 亚洲第一黄色| 久久嫩草精品久久久精品| 亚洲激情成人网| 久久国内精品自在自线400部| 国产精品嫩草99a| 一级成人国产| 日韩系列在线| 欧美日韩亚洲一区二区三区在线 | 娇妻被交换粗又大又硬视频欧美| 亚洲综合欧美日韩| 一区二区福利| 国产精品久久久99| 在线视频欧美日韩| 夜夜嗨av一区二区三区免费区| 欧美高清视频在线| 99re亚洲国产精品| 亚洲精品日韩在线观看| 欧美日韩一二三区| 午夜精品福利在线| 性色av一区二区三区在线观看| 国产视频精品va久久久久久| 久久高清国产| 久久久av毛片精品| 亚洲黄色一区| 亚洲伦理在线观看| 国产精品扒开腿爽爽爽视频| 欧美一级片在线播放| 性做久久久久久久免费看| 国产一区二区三区电影在线观看| 久久精品一区二区三区不卡牛牛| 久久av二区| 亚洲日本成人网| 国产精品99久久久久久宅男 | 亚洲福利久久| 欧美日韩精品免费观看视频| 亚洲综合电影| 久久九九热免费视频| 亚洲精品久久久蜜桃| 一本色道久久综合亚洲精品不| 国产免费成人在线视频| 欧美~级网站不卡| 欧美日本免费| 久久久福利视频| 欧美日本高清一区| 欧美一区二区在线免费观看 | 久久久久综合| 亚洲天堂视频在线观看| 久久成人一区| 在线一区欧美| 久久国产精品久久w女人spa| 9色porny自拍视频一区二区| 午夜国产一区| 99视频在线精品国自产拍免费观看| 亚洲天堂视频在线观看| 亚洲国产精品电影| 欧美一区二区三区四区高清 | 国产伪娘ts一区| 亚洲高清在线视频| 国产视频久久久久久久| 亚洲人成网站999久久久综合| 国产精品青草久久| 亚洲国产精品热久久| 国产欧美精品日韩精品| 亚洲精品美女久久久久| 国产在线日韩| 亚洲特黄一级片| 9l视频自拍蝌蚪9l视频成人| 久久米奇亚洲| 久久精品99国产精品| 欧美涩涩视频| 亚洲精品美女免费| 91久久夜色精品国产九色| 久久国产一二区| 欧美一区二区三区免费看| 欧美日韩精品久久久| 亚洲高清视频在线观看| 激情国产一区| 欧美影片第一页| 欧美在线观看网址综合| 国产精品电影网站| 一区二区国产日产| 亚洲天天影视| 国产精品久久久久久一区二区三区| 亚洲区一区二区三区| 亚洲国产精品电影| 久久天天躁狠狠躁夜夜爽蜜月| 久久婷婷蜜乳一本欲蜜臀| 国产欧美日韩一区二区三区| 亚洲男人的天堂在线aⅴ视频| 午夜视频在线观看一区二区三区 | 亚洲欧洲日本一区二区三区| 极品少妇一区二区三区精品视频| 欧美一区2区视频在线观看 | 国产精品地址| 亚洲一区二区三区四区五区黄 | 亚洲国产高清aⅴ视频| 亚洲国产精品高清久久久| 欧美成人午夜激情| 亚洲激情在线视频| 亚洲视频精选| 国产精品一区视频| 欧美在线精品一区| 欧美sm视频| 日韩亚洲欧美在线观看| 欧美午夜在线一二页| 亚洲主播在线| 午夜精品视频在线观看| 国产毛片一区| 老司机午夜免费精品视频| 亚洲国产老妈| 亚洲欧美日韩一区二区在线 | 欧美激情视频一区二区三区在线播放 | 欧美顶级少妇做爰| 久久久久青草大香线综合精品| 国产亚洲成av人片在线观看桃 | 欧美精品国产一区| 99精品免费视频| 久久精品国产清自在天天线| 亚洲国产高潮在线观看| 欧美日本一道本| 亚洲欧美激情视频| 欧美成人首页| 亚洲欧美激情一区| 亚洲风情在线资源站| 欧美日韩中文在线| 久久婷婷麻豆| 一本色道久久综合| 毛片一区二区三区| 亚洲综合国产| 亚洲精品久久久久中文字幕欢迎你| 欧美日韩在线一区二区三区| 欧美一区二区三区日韩| 亚洲精品视频在线| 久久久免费av| 亚洲综合色在线| 亚洲成色777777在线观看影院 | 亚洲第一精品福利| 欧美天堂亚洲电影院在线播放 | 日韩一级黄色大片| 美女黄毛**国产精品啪啪 | 精品动漫一区| 欧美香蕉大胸在线视频观看| 久久亚洲欧洲| 亚洲一区二区三区久久| 亚洲激情亚洲| 欧美成人激情视频免费观看| 性欧美暴力猛交69hd| 一区二区激情视频| 亚洲国产二区| 亚洲第一综合天堂另类专| 国产午夜久久|