2013-07-21 113 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具体处理:

在一类模板或模板类中的成员的定义中,如果基类模板的类取决于模板参数,在类模板或成员的定义点或类模板或成员的实例化过程中,在非限定名称查找过程中不会检查基类作用域。