有没有办法绕过模板基类成员前缀`this`?

gex*_*ide 1 c++ templates c++11

从模板类继承时,我需要为派生类中访问的所有基类成员添加前缀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
   }
}
Run Code Online (Sandbox Code Playgroud)

正如我所暗示的那样,你必须在会员面前添加前缀的原因this已在此处得到解答.所以我剩下的问题是:有没有办法避免所有的thises?例如,我在派生类中有一个使用大量基类成员的方法.代码看起来完全混乱了所有this->内容.有没有办法省略这些?

Tom*_*Tom 7

为了使这项工作,你需要把非依赖的名字foo,并bar为相关的名称.有三种方法可以做到这一点:

  • this正如您所做的那样,使他们符合资格.这有一个缺点,你需要在使用名称的任何地方都这样做. this隐含地是一个从属名称.
  • 与基类的名字限定他们,X<T>::fooX<T>::bar.这也需要在您使用它们的任何地方完成,并且如果它们变成虚拟方法,则还会破坏虚拟分派机制.
  • 通过using X<T>::foo;和将依赖名称放入非依赖名称空间using X<T>::bar;.

或者,您可以使用VC++进行编译,而VC++对依赖名称和非依赖名称之间的区别并不在意.