C++ Templates 中的一个例子
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是一個non-dependent name, 而基類Base<T>是一個dependent name, 因此不去其中查找.
正確的編譯器做法是: 在#1處報錯.? VC7.1就是如此.
因此在Derived<T>模板類中, 如果確實需要指定Base<T>中的field, 應該使用 this->field 或者 Base<T>::field.?
總結
以上是生活随笔為你收集整理的C++ Templates 中的一个例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度网络模型裁剪和发布正规化
- 下一篇: 10条途径迅速提高你的生活