C ++-访问基类模板的受保护成员

时间:2019-03-02 17:59:51

标签: c++ templates inheritance

我注意到C ++模板不允许派生类在不使用this->memberBase<T>::member的情况下访问基类的受保护成员。在常规课程中,我可以这样写:

class Base{
  public:
  Base(){
    k = 4;
  }
  protected:
  int k;
};

class Derived : public Base{
  public:
  void foo(){
    std::cout << k << '\n';
  }
};

到目前为止没有错误。但是然后,如果我制作了BaseDerived类模板,那么我将无法访问k,而不会更加明确:

template<class T>
class Base{
  public:
  Base(){
    k = 4;
  }
  protected:
  int k;
};

template<class T>
class Derived : public Base<T>{
  public:
  void foo(){
    std::cout << k << '\n'; //error
  }
  void bar(){
    std::cout << this->k << '\n'; //ok
  }
  void bar2(){
    std::cout << Base<T>::k << '\n'; //ok
  }
};

那为什么会发生呢?有什么办法解决吗?我有一个项目,在该项目中,我经常访问基类的受保护成员,而我经常需要取消引用this的事实是a)烦人的输入和b)使代码的可读性降低。

0 个答案:

没有答案