| Impossible is nothing |
|
|||
| 愛過知情重醉過知酒濃 花開花謝終是空 緣份不停留像春風(fēng)來又走 女人如花花似夢(mèng) | ||||
|
公告
日歷
統(tǒng)計(jì)
導(dǎo)航常用鏈接留言簿(4)隨筆分類(4)隨筆檔案(8)文章分類(77)文章檔案(91)相冊(cè)搜索最新評(píng)論
|
模板派生類(下面的D) 從一個(gè) 確定性基類(指B)繼承, 在D的定義中, 編譯器優(yōu)先查找基類中的名字, 然后才是模板參數(shù)placeholder (即Type) . 例如: struct B { typedef int Type; //基類中有一個(gè)Type名字 }; template<class Type> class D : public B //從非依賴基類B派生, { public: Type i; //Type既可以是模板參數(shù), 有可能是基類B中被typedef的int, 優(yōu)先選擇后者 }; int main() { D<char> d; d.i = 29; //d.i 的確切類型應(yīng)該是 B中定義的 int, 而不是模板實(shí)參指定的char. return 0; } VC7.1 確實(shí)如此. 這樣, 是否造成一種現(xiàn)象,就是如果一個(gè)模板類需要繼承一個(gè)普通的基類,它在確定模板參數(shù)名字的時(shí)候還要考慮 到基類中去看看有沒有同名沖突? 或者使用一種防御性的模板參數(shù)命名方法,即僅僅將模板參數(shù)命名為T, U這樣的簡(jiǎn)單類型? C++ Templates <The complete guide> 中的一個(gè)例子: 一個(gè)模板基類 派生類, 從上面的模板基類繼承 template<class T>
正確的編譯器做法是: 在#1處報(bào)錯(cuò). VC7.1就是如此. 因此在Derived<T>模板類中, 如果確實(shí)需要指定Base<T>中的field, 應(yīng)該使用 this->field 或者 Base<T>::field.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|
| Copyright © 笑笑生 | Powered by: 博客園 模板提供:滬江博客 |