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

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

一個模板巧妙技術,語法技巧

研究Boost前,想深入了解一下模板技術,找來一本書《C++ Template:The Complete Guide》研究。
里面有這樣一個小技巧,判斷一個類中是否有某種類形。下面是代碼:(Win 2K+ VS2003)

#include < iostream >

// 返回類型,大小分別為1、2
typedef char RT1;
typedef
struct
{
   
char a[ 2 ];
}
RT2;

// 選擇這個版本將返回char,大小為1
template < typename T > RT1 test(typename T::X const * )
{
   
int     dumy    =   0 ;
    dumy
++ ;
}


// 選擇這個版本將返回char,大小為2
template < typename T > RT2 test()
{
   
int     dumy    =   0 ;
    dumy
++ ;
}


// 依靠編譯器自動選擇test函數,然后依據返回類型判斷是否含有X
template < typename T >
bool type_has_member_type_X()
{
   
return ( sizeof (test < T > ( 0 )) ==   1 );
}


// 有X類型的類
class HasX
{
public :
   
class X
   
{
    }
;
}
;

// 無X類型的類
class NonX
{
public :
   
class Y
   
{
    }
;
}
;

int _tmain( int argc, _TCHAR * argv[])
{
   
// 編譯器選擇重載函數策略:選擇類型最匹配版本
   
// 傾向于把0轉化為常量空指針,所以選擇返回為RT1版本
    if (type_has_member_type_X < HasX > ())
   
{
        std::cout
<<   " Has X "   << std::endl;
    }

   
else
   
{
        std::cout
<<   " Non X "   << std::endl;
    }


   
// 沒有T::X,所以選擇返回為RT2版本
    if (type_has_member_type_X < NonX > ())
   
{
        std::cout
<<   " Has X "   << std::endl;
    }

   
else
   
{
        std::cout
<<   " Non X "   << std::endl;
    }

   
return   0 ;
}
輸出結果:
Has X
Non X
posted on 2006-04-05 22:26 萬連文 閱讀(539) 評論(3)  編輯 收藏 引用 所屬分類: 模板

FeedBack:
# re: 一個模板巧妙技術,語法技巧
2006-04-06 00:23 | dicklee
有個瑕疵,X若為引用類型則會返回不期望的值,例如:
class HasX
{
public:
typedef int& X;
};
type_has_member_type_X < HasX >()
將返回false,類型和特征萃取時,引用類型總是比較麻煩,呵呵  回復  更多評論
 
# re: 一個模板巧妙技術,語法技巧
2006-04-06 13:52 | 萬連文
@dicklee
不錯,看來上面對模板了解深啊,現在才發現自己對編譯器了解甚少!  回復  更多評論
 
# re: 一個模板巧妙技術,語法技巧
2007-08-28 09:49 | 100000
typedef char RT1;
typedef struct
{
char a[ 2 ];
} RT2;

template < typename T >
class NonRef{

public:

typedef T NonRefX;

};

template < typename T >
class NonRef< T& >{

public:

typedef T NonRefX;

};

// 選擇這個版本將返回char,大小為1
template < typename T > RT1 test( typename NonRef< typename T::X >::NonRefX const * )
{
int dumy = 0 ;
dumy ++ ;
}


// 選擇這個版本將返回char,大小為2
template < typename T > RT2 test(...)
{
int dumy = 0 ;
dumy ++ ;
}

// 依靠編譯器自動選擇test函數,然后依據返回類型判斷是否含有X
template < typename T >
bool type_has_member_type_X()
{
return ( sizeof (test < T > ( 0 )) == 1 );
}

// 有X類型的類
class HasX
{
public :

typedef int& X;

} ;

// 無X類型的類
class NonX
{
public :
class Y
{
} ;
} ;


int _tmain(int argc, _TCHAR* argv[])
{
// 編譯器選擇重載函數策略:選擇類型最匹配版本
// 傾向于把0轉化為常量空指針,所以選擇返回為RT1版本

if (type_has_member_type_X < HasX > ())
{
std::cout << " Has X " << std::endl;
}
else
{
std::cout << " Non X " << std::endl;
}

// 沒有T::X,所以選擇返回為RT2版本
if (type_has_member_type_X < NonX > ())
{
std::cout << " Has X " << std::endl;
}
else
{
std::cout << " Non X " << std::endl;
}


return 0;
}
  回復  更多評論

posted on 2008-08-31 21:57 肥仔 閱讀(449) 評論(0)  編輯 收藏 引用 所屬分類: C++ 模板

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩午夜电影| 国产精一区二区三区| 欧美大片免费久久精品三p | 久久亚洲国产精品日日av夜夜| 亚洲黄色免费网站| 精品粉嫩aⅴ一区二区三区四区| 欧美视频专区一二在线观看| 欧美日韩国产综合一区二区| 久久精品五月婷婷| 午夜欧美视频| 久久激情中文| 久久综合一区| 欧美~级网站不卡| 蜜桃av一区二区三区| 1024日韩| 国产尤物精品| 国际精品欧美精品| 亚洲欧洲日本专区| 亚洲国产欧美一区| 一区二区在线免费观看| 国产乱码精品一区二区三区av| 欧美午夜一区二区| 国产一区二区日韩| 国语精品中文字幕| 在线播放中文字幕一区| 国内精品嫩模av私拍在线观看 | 日韩午夜电影av| 久久精品一区蜜桃臀影院| 在线亚洲免费| 免费久久99精品国产| 国产乱码精品| 亚洲永久免费精品| 亚洲国产精品第一区二区三区| 99国产精品自拍| 久久天天躁狠狠躁夜夜爽蜜月| 欧美粗暴jizz性欧美20| 欧美日韩精品欧美日韩精品一| 国产精品高潮在线| 欧美视频国产精品| 欧美xart系列在线观看| 欧美国产精品日韩| 国产精品毛片| 亚洲美女在线一区| 久久精品色图| 亚洲老司机av| 欧美成人综合网站| 六月婷婷一区| 久久视频一区| 亚洲国产高清一区二区三区| 亚洲欧美日韩国产成人精品影院| 国产精品日日摸夜夜添夜夜av| 黑人巨大精品欧美黑白配亚洲| 国产婷婷一区二区| 在线视频成人| 亚洲综合欧美日韩| 国产精品99久久久久久www| 亚洲欧美日韩精品一区二区| 性欧美在线看片a免费观看| 狼人天天伊人久久| 欧美精品黄色| 国产精品欧美激情| 久久精品视频va| 六月丁香综合| 欧美猛交免费看| 国产亚洲欧美中文| 亚洲一区二区三区免费视频| 亚洲一区二区四区| 亚洲欧洲日本专区| 国产一区二区三区在线观看视频| 亚洲精品在线三区| 在线一区二区日韩| 欧美日韩理论| 亚洲午夜在线观看| 欧美激情视频给我| 欧美r片在线| 久久久夜夜夜| 欧美日韩精品在线播放| 日韩视频在线你懂得| 亚洲欧洲精品一区二区精品久久久 | 一本久道久久综合中文字幕| 日韩香蕉视频| 黄色成人在线网址| 欧美激情一区二区三区在线| 久久精品国产在热久久| 国产免费一区二区三区香蕉精| 亚洲一区二区三区在线观看视频| 亚洲国产精品高清久久久| 欧美日韩国产在线播放| 一区二区成人精品| 亚洲小视频在线观看| 欧美日韩国产免费观看| 一本色道婷婷久久欧美| 国内精品久久久| 欧美chengren| 欧美无砖砖区免费| 欧美大尺度在线观看| 欧美激情一二三区| 亚洲午夜黄色| 亚洲国产天堂久久综合| 国产精品一区二区a| 亚洲精品1区| 在线观看日韩av电影| 一区二区免费看| 99精品视频免费观看| 国产精品网站一区| 夜夜嗨av色一区二区不卡| 亚洲第一福利在线观看| 亚洲综合激情| 亚洲日本欧美日韩高观看| 欧美视频久久| 欧美一区二视频在线免费观看| 在线视频亚洲| 亚洲三级视频| 最新国产拍偷乱拍精品| 欧美一区二区久久久| 亚洲午夜精品视频| 亚洲小说欧美另类社区| 欧美日韩激情小视频| 一区二区欧美激情| 伊人久久噜噜噜躁狠狠躁| 久久婷婷人人澡人人喊人人爽| 国产亚洲在线| 久久亚洲精品一区二区| 久久人人爽人人爽| 国产欧美日韩综合一区在线播放| 国产精品久久久久aaaa樱花| 欧美jjzz| 欧美激情一二三区| 最新国产成人在线观看| 免费成人美女女| 久久精品一区| 久久综合久色欧美综合狠狠| 亚洲在线中文字幕| 亚洲国产精品久久久久| 在线观看久久av| 欧美日韩国产成人在线免费| 欧美日本中文| 欧美大片在线观看一区| 欧美国产三区| 亚洲欧美久久久久一区二区三区| 好吊妞**欧美| 一本到高清视频免费精品| 亚洲国产99精品国自产| 一区久久精品| 国产一二精品视频| 国产精品高清免费在线观看| 免费日韩视频| 久久久久久久高潮| 免费观看成人网| 亚洲激情视频网| 激情六月婷婷综合| 亚洲国产精品ⅴa在线观看| 亚洲三级影片| 一本色道久久加勒比88综合| 亚洲电影免费| 久久亚洲精品欧美| 欧美亚洲网站| 精品成人一区| 亚洲一区三区电影在线观看| 亚洲视频综合在线| 久久人人爽爽爽人久久久| 欧美精品一区在线播放| 国产手机视频精品| 亚洲视频在线一区| 女仆av观看一区| 久久精品综合一区| 91久久综合亚洲鲁鲁五月天| 久久久久久久综合| 久久―日本道色综合久久| 亚洲区中文字幕| 亚洲美女电影在线| 国产精品亚洲а∨天堂免在线| 亚洲欧美视频在线观看| 欧美一区二区在线播放| 亚洲国产精彩中文乱码av在线播放 | 久久综合亚州| 亚洲一区中文字幕在线观看| 羞羞视频在线观看欧美| 一本一本久久a久久精品综合妖精| 玖玖玖国产精品| 亚洲欧美精品在线观看| 欧美国产乱视频| 亚洲欧美第一页| 午夜精品在线看| 亚洲激情在线播放| 亚洲欧美日韩精品一区二区| 亚洲二区在线观看| 91久久久久久| 在线精品视频一区二区三四| 日韩亚洲欧美中文三级| 国产乱码精品一区二区三区不卡| 亚洲成色777777女色窝| 蜜臀av国产精品久久久久| 亚洲免费在线电影| 亚洲靠逼com| 久久成人免费网| 这里只有精品在线播放| 久久精品观看| 久久9热精品视频| 欧美日韩在线看|