是否有一种方法来绕过必须前缀模板基类成员与' this '



当从模板类继承时,我需要在派生类中访问的所有基类成员前面加上this:

template<typename T>
struct X{
   int foo;
   void bar();
};
template<typename T>
struct Y : public X<T> {
   void blub(){
       foo++; // Does not work
       this->foo++; // Fine
       bar(); // Does not work
       this->bar(); // Fine
   }
}

正如我所暗示的那样,为什么必须用this作为成员前缀的原因已经在这里得到了回答。所以我剩下的问题是:有没有办法避免所有的this ?例如,我在派生类中有一个方法,它使用了很多基类成员。代码看起来完全混乱的所有this->在其中。有没有办法省略这些?

要做到这一点,您需要将非依赖名称foobar转换为依赖名称。有三种方法可以做到这一点:

  • this限定它们,就像你所做的那样。这样做的缺点是,您需要在使用这些名称的任何地方执行此操作。this是隐式的依赖名称。
  • 用基类名限定它们,如X<T>::fooX<T>::bar。这也需要在使用它们的任何地方完成,并且如果它们被证明是虚拟方法,则会额外破坏虚拟分派机制。
  • 通过using X<T>::foo;using X<T>::bar;将依赖名称引入非依赖名称空间

或者,你可以用vc++编译,vc++不关心依赖和非依赖名称的区别

最新更新