• <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>

            5D空間

            學(xué)習(xí)總結(jié)與經(jīng)驗(yàn)交流

               :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            摘要:二重模板有什么用,什么情況下使用二重模板,對(duì)二重模板進(jìn)行的某種特化進(jìn)行重載,=以及拷貝構(gòu)造函數(shù)在二重模板中的注意事項(xiàng)
              
              小記1是因?yàn)檫@個(gè)話題很可能還有其他小記。
              在模板下定義一個(gè)類,類的方法包括重載的運(yùn)算符往往可以處理這個(gè)類模板對(duì)于相同類型參數(shù)的特化的對(duì)象。但是有時(shí)候我們往往希望一個(gè)類模板的特化對(duì)象的方法還可以處理這個(gè)類模板其他特化的對(duì)象。一種辦法是利用類的性質(zhì)定義轉(zhuǎn)換構(gòu)造函數(shù)(convert constructor ),但是我們可以使用模板得到一種更通用的方法,那就是在類模板中定義二重模板。
              定義方法很簡(jiǎn)單,下面的例子會(huì)展示。注意內(nèi)層模板的參數(shù)應(yīng)該與外層模板不一樣,而且定義的時(shí)候應(yīng)該使用兩層template。
              對(duì)于一般的函數(shù)和運(yùn)算符,通常來(lái)說(shuō),如果只定義一個(gè)二重模板的方法,它既可以處理不同類型的特化對(duì)象,也可以處理相同類型的特化對(duì)象(即T和C是相同類型)。如果在外層模板中另外定義了一個(gè)普通的同名方法(以處理相同類型的特化對(duì)象),那么在處理相同類型的特化對(duì)象時(shí),則會(huì)調(diào)用這一套方法。這有點(diǎn)像對(duì)模板特化進(jìn)行重載(告訴編譯器在特殊情況,這里是特化類型相同,應(yīng)該使用另外一套方法)。
            例如:
            如果把8行和14~18行注釋掉,那么輸出結(jié)果均為兩行 接受不同類型。
             1#include <iostream>
             2using namespace std;
             3
             4template < typename T >
             5class A
             6{
             7public:
             8    void function( const A< T > & );
             9
            10    template < typename C >
            11    void function( const A< C > & );
            12}
            ;
            13
            14template < typename T >
            15void A< T >::function( const A< T > & )
            16{
            17    cout << "接受相同類型" << endl;
            18}

            19
            20template < typename T >
            21template < typename C >
            22void A< T >::function( const A< C > & )
            23{
            24    cout << "接受不相同類型" << endl;
            25}

            26
            27int main()
            28{
            29    A< int > a;
            30    A< int > b;
            31    A< double > c;
            32
            33    a.function( b );
            34    a.function( c );
            35}

              但是對(duì)于復(fù)制操作符和拷貝構(gòu)造函數(shù)來(lái)說(shuō),情況有些不一樣。因?yàn)榫幾g器會(huì)為沒(méi)有定義的類提供默認(rèn)=以及拷貝構(gòu)造函數(shù),根據(jù)上面的分析,這個(gè)默認(rèn)的東西相當(dāng)于對(duì)二重模板中特殊情況的重載,所以如果只有一個(gè)二重模板,那么它將不能處理相同類型的類模板特化的對(duì)象。而這時(shí),程序會(huì)調(diào)用編譯器提供的默認(rèn)=以及拷貝構(gòu)造函數(shù),而這往往是我們不想要的(我們需要自己定制的=以及拷貝構(gòu)造函數(shù)啊)。所以這時(shí),我們需要自己定制一套非二重模板的=或者拷貝構(gòu)造函數(shù)來(lái)滿足需求。

            例如:
            如果把8行和14~18行注釋掉,那么輸出結(jié)果只有一行 為不同類型調(diào)用=號(hào) ,因?yàn)榱硗庖痪湓捳{(diào)用了編譯器提供的默認(rèn)=號(hào),所以并沒(méi)有任何輸出。
             1#include <iostream>
             2using namespace std;
             3
             4template < typename T >
             5class B
             6{
             7public:
             8    void operator=const B< T > & );
             9
            10    template < typename C >
            11    void operator=const B< C > & );
            12}
            ;
            13
            14template < typename T >
            15void B< T >::operator=const B< T > & )
            16{
            17    cout << "為相同類型調(diào)用=號(hào)" << endl;
            18}

            19
            20template < typename T >
            21template < typename C >
            22void B< T >::operator=const B< C > & )
            23{
            24    cout << "為不同類型調(diào)用=號(hào)" << endl;
            25}

            26
            27int main()
            28{
            29    B< int > a;
            30    B< int > b;
            31    B< double > c;
            32
            33    a = b;
            34    a = c;
            35}
            posted on 2011-04-05 13:50 今晚打老虎 閱讀(1324) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 學(xué)習(xí)筆記
            久久频这里精品99香蕉久| 久久久久久久久久久久中文字幕 | 欧美久久综合九色综合| 日韩精品无码久久一区二区三| 欧美久久久久久午夜精品| 伊人久久亚洲综合影院| 国内精品久久人妻互换| 久久精品国产一区二区电影| 久久人人爽人人爽人人片AV麻烦| 久久亚洲中文字幕精品有坂深雪| 伊人色综合久久| 久久九九兔免费精品6| 国产精品伊人久久伊人电影| 亚洲欧美伊人久久综合一区二区| 久久九九有精品国产23百花影院| 亚洲va久久久久| 久久国产精品波多野结衣AV| 久久久久人妻一区精品色| 一本色道久久综合| 国产精品欧美亚洲韩国日本久久| 亚洲精品无码成人片久久| 日韩欧美亚洲国产精品字幕久久久| 久久99国产精品一区二区| 亚洲乱码精品久久久久..| 性做久久久久久免费观看| 狠狠人妻久久久久久综合蜜桃| 久久亚洲精品成人AV| 亚洲精品乱码久久久久久自慰| 91精品久久久久久无码| 国产精品免费看久久久| 久久国产成人| 日本强好片久久久久久AAA | 国产—久久香蕉国产线看观看| 18禁黄久久久AAA片| 色狠狠久久综合网| 一本色综合久久| 国内精品久久国产| 久久天天婷婷五月俺也去| 午夜精品久久久久9999高清| 无码国内精品久久人妻麻豆按摩 | 亚洲va久久久噜噜噜久久|