• <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  
              愛過知情重醉過知酒濃   花開花謝終是空   緣份不停留像春風來又走   女人如花花似夢
            公告
            日歷
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345
            統計
            • 隨筆 - 8
            • 文章 - 91
            • 評論 - 16
            • 引用 - 0

            導航

            常用鏈接

            留言簿(4)

            隨筆分類(4)

            隨筆檔案(8)

            文章分類(77)

            文章檔案(91)

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             

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


            例如:
            struct B
            {
               typedef int Type;        //基類中有一個Type名字
            };

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

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

               return 0;
            }

            VC7.1 確實如此.

            這樣, 是否造成一種現象,就是如果一個模板類需要繼承一個普通的基類,它在確定模板參數名字的時候還要考慮
            到基類中去看看有沒有同名沖突? 

            或者使用一種防御性的模板參數命名方法,即僅僅將模板參數命名為T, U這樣的簡單類型?

            C++ Templates <The complete guide> 中的一個例子:

            一個模板基類
            template<class T>
            class Base
            {
            public:
               int field;       // #1
            };

            派生類, 從上面的模板基類繼承
            注意, 在此, 基類并不能確定就是上面的Base<T>,
            因為 下面#3 處可以看到, 程序對Base<int>進行了特化

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


            #2處的field到底是char還是int類型? 即#1處還是#3處 ? 顯然無法確定, 只有當
            Derived被某個特定的T類型實例化的時候才知道.


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


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

            正確的編譯器做法是: 在#1處報錯.  VC7.1就是如此.

            因此在Derived<T>模板類中, 如果確實需要指定Base<T>中的field, 應該使用 this->field 或者 Base<T>::field. 

            posted on 2006-02-27 23:19 笑笑生 閱讀(263) 評論(0)  編輯 收藏 引用 所屬分類: C++語言
             
            Copyright © 笑笑生 Powered by: 博客園 模板提供:滬江博客
            欧美激情精品久久久久久| 欧美va久久久噜噜噜久久| 久久综合综合久久97色| 亚洲一区中文字幕久久| 国产精品免费久久| 一本色综合久久| 色欲av伊人久久大香线蕉影院| 亚洲AV无码一区东京热久久| 国产精品久久久久9999高清| 国产一区二区三精品久久久无广告| 国产日韩欧美久久| 伊人色综合久久天天人手人婷 | 996久久国产精品线观看| 国产精品久久久久久久久久免费| 伊人久久成人成综合网222| 日韩久久久久久中文人妻 | 国产精品成人无码久久久久久 | 中文字幕一区二区三区久久网站 | 久久精品国产亚洲av麻豆蜜芽| 久久婷婷五月综合97色一本一本 | 嫩草影院久久99| 久久精品国产男包| 国内精品久久久久久久久电影网| 伊人久久大香线蕉AV色婷婷色 | 亚洲午夜精品久久久久久app| 国产精品久久亚洲不卡动漫| 久久精品卫校国产小美女| 久久国产精品99久久久久久老狼| 久久久久久久波多野结衣高潮| 久久99精品久久久久久野外| 久久亚洲精品成人av无码网站| 国产精品久久新婚兰兰| 精品久久久久久国产免费了| 成人久久久观看免费毛片| 亚洲狠狠婷婷综合久久久久 | 午夜欧美精品久久久久久久| 国产精品日韩欧美久久综合| 精品久久久久久中文字幕人妻最新 | 狠狠色噜噜狠狠狠狠狠色综合久久| 中文无码久久精品| 一本色道久久综合亚洲精品|