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

xiaoguozi's Blog
Pay it forword - 我并不覺(jué)的自豪,我所嘗試的事情都失敗了······習(xí)慣原本生活的人不容易改變,就算現(xiàn)狀很糟,他們也很難改變,在過(guò)程中,他們還是放棄了······他們一放棄,大家就都是輸家······讓愛(ài)傳出去,很困難,也無(wú)法預(yù)料,人們需要更細(xì)心的觀察別人,要隨時(shí)注意才能保護(hù)別人,因?yàn)樗麄兾幢刂雷约阂裁础ぁぁぁぁ?/span>

在STL中為了提供通用的操作而又不損失效率,我們用到了一種特殊的技巧,叫traits編程技巧。具體的來(lái)說(shuō),traits就是 通過(guò)定義一些結(jié)構(gòu)體或類,并利用模板類特化和偏特化的能力,給類型賦予一些特性,這些特性根據(jù)類型的不同而異。在程序設(shè)計(jì)中可以使用這些traits來(lái)判 斷一個(gè)類型的一些特性,引發(fā)C++的函數(shù)重載機(jī)制,實(shí)現(xiàn)同一種操作因類型不同而異的效果。traits的編程技巧極度彌補(bǔ)了C++語(yǔ)言的不足 。


舉例:

現(xiàn)在定義一個(gè)__type_traits可以獲得類型的如下屬性:
1. 是否存在non-trivial default constructor
2. 是否存在non-trivial copy constructor
3. 是否存在non-trivial assignment operator
4. 是否存在non-trivial destructor

struct __true_type {
};
struct __false_type {
};

template <class _Tp>
struct __type_traits {

   typedef __false_type    has_trivial_default_constructor;
   typedef __false_type    has_trivial_copy_constructor;
   typedef __false_type    has_trivial_assignment_operator;
   typedef __false_type    has_trivial_destructor;
};


問(wèn)題:為什么把對(duì)象的所有的屬性都定義為_(kāi)_false_type?
這樣是采用最保守的做法,先把所有的對(duì)象屬性都設(shè)置為_(kāi)_false_type,然后在針對(duì)每個(gè)基本數(shù)據(jù)類型設(shè)計(jì)特化的__type_traits,就可以達(dá)到預(yù)期的目的,如可以定義__type_traits<int>如下:

template <>
struct __type_traits<int> {
   typedef __true_type    has_trivial_default_constructor;
   typedef __true_type    has_trivial_copy_constructor;
   typedef __true_type    has_trivial_assignment_operator;
   typedef __true_type    has_trivial_destructor;
};

template <>
struct __type_traits<char> {
   typedef __true_type    has_trivial_default_constructor;
   typedef __true_type    has_trivial_copy_constructor;
   typedef __true_type    has_trivial_assignment_operator;
   typedef __true_type    has_trivial_destructor;
};

    ......

    ......


其他基本類型的traits也可以有相應(yīng)的定義

__type_traits的偏特化版本
template <class _Tp>
struct __type_traits<_Tp*> {
   typedef __true_type    has_trivial_default_constructor;
   typedef __true_type    has_trivial_copy_constructor;
   typedef __true_type    has_trivial_assignment_operator;
   typedef __true_type    has_trivial_destructor;
   typedef __true_type    is_POD_type;
};

我們可以自定義__type_traits的特化版本
比如對(duì)與自定義的Shape類型,我們可以這樣定義__type_traits<Shape>
struct __type_traits<Shape> {
   typedef __false_type    has_trivial_default_constructor;
   typedef __true_type    has_trivial_copy_constructor;
   typedef __true_type    has_trivial_assignment_operator;
   typedef __true_type    has_trivial_destructor;
   typedef __true_type    is_POD_type;
};

如果編譯器夠厲害,我們甚至可以不用自己去定義特化的__type_traits,編譯器就能夠幫我們搞定:)

如何使用呢?

假設(shè)現(xiàn)在用個(gè)模板函數(shù)fun需要根據(jù)類型T是否有non-trivial constructor來(lái)進(jìn)行不同的操作,可以這樣來(lái)實(shí)現(xiàn):

template<class T>
void fun()
{
     typedef typename __type_traits<T>::has_trivial_constructor _Trivial_constructor;
    __fun(_Trivial_constructor()); // 根據(jù)得到的_Trivial_constructor來(lái)調(diào)用相應(yīng)的函數(shù)
}

// 兩個(gè)重載的函數(shù)
void _fun(_true_type)
{
cout<<"fun(_true_type)called"<<endl;
}
void _fun(_false_type)
{
cout<<"fun(_false_type) called"<<endl;
}

//測(cè)試代碼

int main()
{
fun<char>();
fun<int>();
fun<char *>();
fun<double>();
}

posted on 2010-10-11 09:24 小果子 閱讀(1629) 評(píng)論(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>
            亚洲视频导航| 伊人久久综合| 亚洲性图久久| 亚洲深夜福利在线| 欧美日韩一区二区三| 亚洲图片在线| 亚洲免费在线视频| 影音先锋亚洲一区| 亚洲黑丝在线| 欧美国产日韩一区| 亚洲一本视频| 欧美一区二区三区视频在线| 国内精品嫩模av私拍在线观看 | 亚洲一区成人| 亚洲一区影院| 亚洲第一页在线| 99ri日韩精品视频| 国产亚洲成av人片在线观看桃 | 蜜桃久久av一区| 免费成人在线视频网站| 夜色激情一区二区| 性做久久久久久久免费看| 亚洲国产另类久久久精品极度| 91久久久久久久久久久久久| 国产精品乱码妇女bbbb| 欧美国产日韩免费| 国产欧美一区二区精品婷婷 | 久久精品国产一区二区三区免费看| 久久国产手机看片| 亚洲丝袜av一区| 久久久久在线观看| 亚洲欧美日韩成人高清在线一区| 久久精品一区二区国产| 国产精品99久久久久久久久久久久| 欧美一区二区三区另类| 在线亚洲一区二区| 久久久人人人| 欧美一区二区啪啪| 欧美另类在线播放| 免费视频久久| 国产无一区二区| 艳妇臀荡乳欲伦亚洲一区| 一色屋精品亚洲香蕉网站| 亚洲一区欧美激情| 妖精成人www高清在线观看| 麻豆成人av| 久久久久国产精品一区| 国产精品免费区二区三区观看| 亚洲黑丝在线| 亚洲精品裸体| 久久亚洲免费| 久久综合色一综合色88| 午夜在线视频一区二区区别| 欧美久久影院| 欧美高清视频www夜色资源网| 国产伪娘ts一区| 欧美一区二区三区另类| 欧美中文字幕在线| 国产麻豆日韩| 亚洲综合色网站| 午夜精品国产更新| 国产精品永久免费视频| 亚洲香蕉在线观看| 香蕉成人伊视频在线观看| 国产精品久久波多野结衣| 日韩一二在线观看| 亚洲无玛一区| 国产精品入口夜色视频大尺度 | 亚洲三级观看| 一区二区三区高清不卡| 欧美日韩成人精品| 99视频精品全部免费在线| 中日韩美女免费视频网址在线观看| 欧美激情乱人伦| 亚洲乱码精品一二三四区日韩在线 | 亚洲一区二三| 欧美一区二区三区久久精品茉莉花| 国产精品狼人久久影院观看方式| 99热精品在线| 欧美亚洲尤物久久| 国产亚洲欧美一级| 欧美一区二区视频在线| 老色批av在线精品| 在线看片成人| 欧美激情亚洲一区| 亚洲高清久久久| 亚洲午夜三级在线| 国产深夜精品福利| 蜜桃av一区二区在线观看| 99热精品在线观看| 久久久久9999亚洲精品| 亚洲欧洲日本专区| 国产精品二区在线| 久久久国产一区二区| 亚洲人成高清| 久久不见久久见免费视频1| 一区二区电影免费观看| 久久久久久久激情视频| 亚洲区免费影片| 国产精品亚洲不卡a| 免费欧美日韩| 亚洲欧美一区二区原创| 欧美激情一区二区三区高清视频| 亚洲永久网站| 精品动漫3d一区二区三区免费| 欧美日韩1080p| 久久精品欧洲| 中文欧美在线视频| 欧美大片在线观看| 久久岛国电影| 一本色道久久加勒比88综合| 国产视频欧美视频| 欧美午夜免费| 欧美国产一区二区在线观看| 性18欧美另类| 一区二区三区精品视频| 亚洲高清成人| 欧美不卡激情三级在线观看| 欧美一区二区女人| 亚洲性图久久| 一区二区三区视频免费在线观看| 在线不卡免费欧美| 国产区精品视频| 国产精品久久久久久久7电影 | 亚洲欧美影音先锋| 一区二区三区产品免费精品久久75 | 久久一区二区视频| 欧美亚洲专区| 午夜久久一区| 亚洲欧美日韩专区| 亚洲淫片在线视频| 亚洲视频电影图片偷拍一区| 亚洲欧洲日韩在线| 亚洲国产欧美在线人成| 欧美福利视频一区| 欧美国产精品中文字幕| 美女视频一区免费观看| 久久亚洲综合色一区二区三区| 欧美在线观看视频一区二区| 午夜精品久久久久| 午夜久久电影网| 欧美在线视频导航| 欧美永久精品| 久久综合精品国产一区二区三区| 久久亚洲欧美国产精品乐播| 麻豆精品精品国产自在97香蕉| 久久久久国产成人精品亚洲午夜| 久久久欧美精品sm网站| 久久久久国产精品一区二区| 久久久久综合网| 久久在线91| 亚洲国产精品视频一区| 最新中文字幕亚洲| 99视频在线观看一区三区| 一区二区三区.www| 欧美在线网址| 美乳少妇欧美精品| 欧美日韩色婷婷| 国产伦精品一区二区三区视频孕妇 | 一本大道久久a久久综合婷婷 | 亚洲尤物视频网| 久久激情视频久久| 蜜桃av一区二区三区| 欧美日韩亚洲一区二区三区四区 | 国产精品伊人日日| 黑丝一区二区| 亚洲人成人77777线观看| 一个色综合导航| 欧美在线视频免费| 欧美成人中文字幕| 一区二区三区日韩| 久久福利电影| 欧美日韩国产91| 国产亚洲欧美日韩美女| 一区二区三区视频在线看| 午夜久久影院| 欧美区一区二| 韩日精品视频| 亚洲无线视频| 美女视频一区免费观看| 亚洲视频1区| 美国成人毛片| 国产日产欧美a一级在线| 亚洲精品乱码久久久久久日本蜜臀 | 男女精品视频| 亚洲一区二区三区四区中文| 免费成人你懂的| 国产三级欧美三级| 亚洲一卡久久| 亚洲第一狼人社区| 欧美一区二区三区久久精品茉莉花| 欧美人妖另类| 亚洲国产激情| 久久久精品国产免大香伊| 91久久精品美女高潮| 久久久蜜桃精品| 国产一区二区| 欧美亚洲一区三区| 亚洲网站视频福利| 欧美日韩国产bt|