C++ 模板類繼承,成員訪問問題
阿新 • • 發佈:2019-01-01
c++中宣告一個模板類及子類,在子類中如果需要訪問父類的protected變數,需要使用父類的類作用域限定符,否則會報“identifier not found”錯誤。
例如:
template<typename T> class A { protected: int a; }; template<typename T> //模板的繼承,基類需要指定模板引數 class B : public A<T> { public: void func() { //此處必須使用A::a來訪問;否則會找不到a的定義 //如果不是模板類,顯然可以直接使用a來訪問 cout << A::a << endl; } };
模板函式的內部類繼承時,也是類似的。
例如:
template<typename T> class outer { public: class innerBase { protected: T a; }; //在模板類內部繼承相同範圍內的基類,基類能指定模板引數(內部類預設使用外部類的模板引數) //如果繼承其他的模板類,則需要指定模板引數;內部類也可以定義自己的模板引數 class innerDrive : public innerBase { public: void func() { //此處必須使用innerBase::a(或者使用outer::innerBase::a)來訪問a //否則無法找到a的定義 cout << innerBase::a << endl; } }; };