在模板类

时间:2019-05-11 08:04:15

标签: c++ templates inheritance protected

我在访问模板类的模板子类中的受保护成员时遇到问题。

问题是,如果我删除模板,则一切正常。我知道如何通过为每个单个派生类简单地编写“使用Base :: my_protected_member”来丑陋地解决问题。但是,为什么我首先需要这样做?

这是一个最少的评论示例

template<class T>
class Base
{
    protected:
        T x;
    public:
        Base(T x) : x(x) {}
};

template<class T>
class Derived : public Base<T>
{
    //using Base<T>::x; //why ?!

    public:
        Derived(T x);
        void print();
};

template<class T>
Derived<T>::Derived(T x) : Base<T>(x) 
{ cout << x << endl; } //works fine

template<class T>
void Derived<T>::print() { cout << x << endl; } //doesn't work

int main()
{
    Derived<int> d(4);
    d.print();
}

我不太了解发生了什么,或者如何很好地解决此问题。可能我做错了事...

0 个答案:

没有答案