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

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>
            亚洲欧美国产77777| 老司机免费视频久久| 欧美综合77777色婷婷| 性欧美暴力猛交另类hd| 午夜宅男欧美| 久久免费视频在线观看| 久久久青草婷婷精品综合日韩| 国产欧美日韩麻豆91| 国产一区二区三区久久精品| 在线免费观看一区二区三区| 一区二区高清| 香蕉国产精品偷在线观看不卡| 久久免费99精品久久久久久| 亚洲国产精品成人综合| a4yy欧美一区二区三区| 欧美一区1区三区3区公司| 免费在线看成人av| 国产精品第三页| 亚洲成人在线免费| 午夜视频在线观看一区二区| 欧美成人黄色小视频| 中日韩视频在线观看| 蜜桃av一区| 国产精品午夜视频| 亚洲精品日韩在线| 久久国产精品免费一区| 亚洲乱码精品一二三四区日韩在线| 午夜精品久久久久久99热| 欧美成人蜜桃| 国内一区二区在线视频观看| 亚洲视频1区2区| 欧美99久久| 欧美一进一出视频| 国产精品国产a| 一区二区三区国产精品| 欧美1区2区视频| 欧美一级午夜免费电影| 欧美午夜精品久久久久久人妖 | 国产精品美女久久久久久久| 永久免费精品影视网站| 亚洲欧美国产一区二区三区| 亚洲第一黄色| 久久久久久亚洲精品杨幂换脸| 国产精品久久久久久久久久久久久久 | 欧美成人第一页| 99精品欧美一区二区三区综合在线| 香蕉乱码成人久久天堂爱免费| 欧美日韩国产电影| 亚洲国产成人精品视频| 久久婷婷蜜乳一本欲蜜臀| 亚洲视频香蕉人妖| 欧美日韩日韩| 中日韩高清电影网| 亚洲乱码久久| 欧美日韩国语| 中国日韩欧美久久久久久久久| 欧美激情中文字幕乱码免费| 久久久久久久久久久久久9999| 国产欧美精品一区aⅴ影院| 亚洲综合首页| 亚洲一区二区精品视频| 国产精品久久久久免费a∨大胸| 在线综合亚洲欧美在线视频| 亚洲精品中文字幕有码专区| 欧美日本国产在线| 亚洲少妇一区| 亚洲在线观看| 国内一区二区在线视频观看| 久久综合久久美利坚合众国| 久久人人97超碰精品888| 亚洲第一视频| 亚洲日本激情| 国产精品国产一区二区| 欧美在线观看你懂的| 欧美一区国产二区| 亚洲成色999久久网站| 亚洲国产日韩美| 国产精品va在线播放| 久久久久99| 欧美福利一区二区| 午夜欧美精品久久久久久久| 久久高清国产| 亚洲免费观看高清在线观看| 亚洲午夜女主播在线直播| 国产一区久久| 亚洲欧洲精品一区二区三区| 欧美性生交xxxxx久久久| 久久久在线视频| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美日韩国产一区精品一区 | 久久riav二区三区| 麻豆国产精品va在线观看不卡| 一本一本久久| 久久国产高清| 夜久久久久久| 久久久99久久精品女同性| 一区二区三区精品| 久久精品国产清自在天天线 | 亚洲电影天堂av| 一区二区欧美在线| 美国十次了思思久久精品导航| 在线一区欧美| 免费观看久久久4p| 欧美有码在线观看视频| 欧美国产视频一区二区| 久久九九热re6这里有精品| 欧美日韩国产二区| 欧美阿v一级看视频| 国产精品久久久久久久久久ktv| 麻豆成人在线观看| 国产精品黄色| 亚洲精品视频啊美女在线直播| 国模大胆一区二区三区| 亚洲网在线观看| 一二三区精品| 牛人盗摄一区二区三区视频| 久久亚洲私人国产精品va| 国产精品一区在线观看| 一本久道久久综合狠狠爱| 亚洲精品久久嫩草网站秘色 | 国产久一道中文一区| 日韩视频永久免费| 亚洲精品视频在线看| 久久在线免费观看视频| 久久爱91午夜羞羞| 国产麻豆成人精品| 亚洲亚洲精品三区日韩精品在线视频 | 国产精品二区二区三区| 亚洲日本理论电影| 亚洲精品在线看| 美女诱惑一区| 欧美黄色免费网站| 亚洲精品乱码久久久久久| 久久综合九色九九| 欧美成人三级在线| 亚洲激情综合| 蜜桃久久av一区| 亚洲成人自拍视频| 亚洲国产欧美精品| 欧美电影免费| 99pao成人国产永久免费视频| 一卡二卡3卡四卡高清精品视频 | 欧美日韩亚洲高清一区二区| 亚洲精品日韩激情在线电影| 一本到高清视频免费精品| 欧美精品九九| 一本到12不卡视频在线dvd| 亚洲欧美电影院| 国产精品网站在线| 午夜一区二区三区不卡视频| 久久国产精品久久精品国产| 国产乱人伦精品一区二区 | 久久在线视频| 亚洲人成在线观看| 亚洲天堂男人| 国产一区二区剧情av在线| 久久九九精品| 亚洲区在线播放| 欧美亚洲一区二区在线观看| 国产一区99| 欧美激情综合五月色丁香| 亚洲深夜av| 欧美jizzhd精品欧美喷水| 亚洲美女视频在线观看| 一区二区三区视频在线| 久久疯狂做爰流白浆xx| 在线播放日韩专区| 欧美二区不卡| 亚洲欧美综合一区| 欧美国产亚洲精品久久久8v| 亚洲一区二区三区精品视频| 国产精品综合久久久| 老司机午夜精品视频| 一本久道久久综合中文字幕 | 久久夜色精品国产亚洲aⅴ| 亚洲人www| 国产日韩精品入口| 欧美极品欧美精品欧美视频| 亚洲欧美日韩精品综合在线观看| 欧美成人一区在线| 欧美一区二区三区四区高清| 亚洲日本免费| 国内精品久久久久久| 国产精品分类| 欧美激情第五页| 久久深夜福利免费观看| 亚洲小视频在线| 亚洲日韩视频| 欧美激情精品久久久久久变态| 香蕉av福利精品导航| 夜夜嗨av色综合久久久综合网| 黄色另类av| 国产拍揄自揄精品视频麻豆| 欧美人成在线视频| 免费国产一区二区| 久久免费的精品国产v∧| 香蕉久久国产| 亚洲欧美日韩专区| 亚洲一区激情| 亚洲一区二区三区午夜|