• <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>
            Impossible is nothing  
              愛(ài)過(guò)知情重醉過(guò)知酒濃   花開(kāi)花謝終是空   緣份不停留像春風(fēng)來(lái)又走   女人如花花似夢(mèng)
            公告
            日歷
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567
            統(tǒng)計(jì)
            • 隨筆 - 8
            • 文章 - 91
            • 評(píng)論 - 16
            • 引用 - 0

            導(dǎo)航

            常用鏈接

            留言簿(4)

            隨筆分類(lèi)(4)

            隨筆檔案(8)

            文章分類(lèi)(77)

            文章檔案(91)

            相冊(cè)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

             

            模板派生類(lèi)(下面的D) 從一個(gè) 確定性基類(lèi)(指B)繼承,
            在D的定義中, 編譯器優(yōu)先查找基類(lèi)中的名字, 然后才是模板參數(shù)placeholder (即Type) .


            例如:
            struct B
            {
               typedef int Type;        //基類(lèi)中有一個(gè)Type名字
            };

            template<class Type>
            class D : public B           //從非依賴(lài)基類(lèi)B派生,
            {
            public:
              Type i;      //Type既可以是模板參數(shù), 有可能是基類(lèi)B中被typedef的int, 優(yōu)先選擇后者
            };

            int  main()
            {
               D<char> d;
               d.i = 29;          //d.i 的確切類(lèi)型應(yīng)該是 B中定義的 int, 而不是模板實(shí)參指定的char.

               return 0;
            }

            VC7.1 確實(shí)如此.

            這樣, 是否造成一種現(xiàn)象,就是如果一個(gè)模板類(lèi)需要繼承一個(gè)普通的基類(lèi),它在確定模板參數(shù)名字的時(shí)候還要考慮
            到基類(lèi)中去看看有沒(méi)有同名沖突? 

            或者使用一種防御性的模板參數(shù)命名方法,即僅僅將模板參數(shù)命名為T(mén), U這樣的簡(jiǎn)單類(lèi)型?

            C++ Templates <The complete guide> 中的一個(gè)例子:

            一個(gè)模板基類(lèi)
            template<class T>
            class Base
            {
            public:
               int field;       // #1
            };

            派生類(lèi), 從上面的模板基類(lèi)繼承
            注意, 在此, 基類(lèi)并不能確定就是上面的Base<T>,
            因?yàn)?下面#3 處可以看到, 程序?qū)ase<int>進(jìn)行了特化

            template<class T>
            class Derived : public Base<T>
            {
            public:
             void f()
             {
              field++;          //#2 哪個(gè)field? #1處還是#3處,
             }
            };


            #2處的field到底是char還是int類(lèi)型? 即#1處還是#3處 ? 顯然無(wú)法確定, 只有當(dāng)
            Derived被某個(gè)特定的T類(lèi)型實(shí)例化的時(shí)候才知道.


            template<>
            class Base<int>
            {
            public:
             char field;           //#3
            };


            #2處的field是一個(gè)unqualified name, 而基類(lèi)Base<T>是一個(gè)dependent name, 因此不去其中查找.

            正確的編譯器做法是: 在#1處報(bào)錯(cuò).  VC7.1就是如此.

            因此在Derived<T>模板類(lèi)中, 如果確實(shí)需要指定Base<T>中的field, 應(yīng)該使用 this->field 或者 Base<T>::field. 

            posted on 2006-02-27 23:19 笑笑生 閱讀(260) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): C++語(yǔ)言
             
            Copyright © 笑笑生 Powered by: 博客園 模板提供:滬江博客
            7777精品伊人久久久大香线蕉| 青青青伊人色综合久久| 久久久久久国产a免费观看不卡| 午夜不卡888久久| 婷婷久久综合九色综合98| 久久国产成人亚洲精品影院| 日韩人妻无码一区二区三区久久99| 香蕉久久夜色精品升级完成| 久久se精品一区二区| 久久无码人妻精品一区二区三区 | 久久久久久毛片免费播放| 国产日产久久高清欧美一区| 久久天天躁狠狠躁夜夜2020| 国产成人精品久久二区二区| 久久亚洲国产精品成人AV秋霞| 精品久久久久久久久中文字幕| 亚洲精品WWW久久久久久| 久久久久久a亚洲欧洲aⅴ| 99久久99久久精品国产片果冻| 久久夜色精品国产亚洲| 久久久久亚洲精品无码蜜桃| 中文成人无码精品久久久不卡| 日韩亚洲欧美久久久www综合网 | 久久久91人妻无码精品蜜桃HD| 久久亚洲AV成人无码电影| 亚洲国产成人精品91久久久| 精品久久久久久国产潘金莲| 一本一本久久a久久精品综合麻豆| 女人香蕉久久**毛片精品| 久久精品国产亚洲77777| 久久久午夜精品| 久久婷婷五月综合色99啪ak| 精品免费久久久久国产一区 | 国产69精品久久久久777| 久久亚洲AV成人无码电影| 新狼窝色AV性久久久久久| 精品久久久久久国产| 亚洲午夜久久久久妓女影院 | 国产亚洲欧美精品久久久| 午夜精品久久久久久久| 久久99精品国产麻豆宅宅|