从模板类继承时,我需要在派生类中访问的所有基类成员前面加上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
的原因已经得到解答HERE .所以我剩下的问题是:有没有办法避免所有的 this
es?例如,我在派生类中有一个方法使用了很多基类成员。代码看起来完全困惑,其中包含所有 this->
。有没有办法省略这些?
最佳答案
要完成这项工作,您需要将非依赖名称转为 foo
和 bar
成依赖名称。可以通过三种方式做到这一点:
- 使用
this
对他们进行资格认证,就像你所做的那样。这样做的缺点是您需要在使用名称的任何地方执行此操作。this
隐含地是从属名称。 - 用基类名限定它们,如
X<T>::foo
和X<T>::bar
.这也需要在您使用它们的任何地方完成,并且如果它们最终是虚拟方法,还会破坏虚拟分派(dispatch)机制。 - 通过
using X<T>::foo;
将依赖名称放入非依赖 namespace 和using X<T>::bar;
.
或者,您可以使用 VC++ 进行编译,它不关心依赖名称和非依赖名称之间的区别。
关于c++ - 有没有办法避免在模板基类成员前面加上 `this` 前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25402716/