2013-07-21 116 views
2

我不知道我編碼的方式是否正確。我可以創建一個從模板類繼承的模板claas嗎?如果可以,是下面的代碼正確:C++模板繼承方案

template<typename Type> 
class A{ 
    public: 
     A(){}; 
     method_A(){//do whatever} 
    protected: 
     int a; 
} 

第二類是:

template<typename Type> 
class B:public<Type> A { 
    public: 
     B(){}; 
     method_B(){this->a=0; this->method_A();} 
    protected: 
     int b; 
} 

,我的最後一課是:

class C:public<double> B{ 
    public: 
     C(){}; 
     method_C(){ b = 0; method_B();} 
    protected: 
     int c; 
} 

爲什麼在類的強制性this-> B但不在C班?一般來說,我應該總是將this->添加到屬於同一類的引用參數或方法嗎?

+4

您的意思是'A '和'B '? – jrok

+0

它實際上被稱爲*類模板*,而不是*模板類*。這是一個暗示,一旦你實例化一個類模板,它不再是一個模板,而只是一個類。 – dyp

+0

請注意,您無法訪問派生類中基類中定義的'private'成員。將其設置爲「受保護」或使用getter/setter函數。 – dyp

回答

3

這在部分的C++ 03和C++ 11標準14.6.2p3具體處理:

在一類模板或模板類中的成員的定義中,如果基類模板的類取決於模板參數,在類模板或成員的定義點或類模板或成員的實例化過程中,在非限定名稱查找過程中不會檢查基類作用域。