gpt4 book ai didi

c++ - 有没有办法避免在模板基类成员前面加上 `this` 前缀?

转载 作者:太空宇宙 更新时间:2023-11-03 10:44:27 27 4
gpt4 key购买 nike

从模板类继承时,我需要在派生类中访问的所有基类成员前面加上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 .所以我剩下的问题是:有没有办法避免所有的 thises?例如,我在派生类中有一个方法使用了很多基类成员。代码看起来完全困惑,其中包含所有 this->。有没有办法省略这些?

最佳答案

要完成这项工作,您需要将非依赖名称转为 foobar成依赖名称。可以通过三种方式做到这一点:

  • 使用 this 对他们进行资格认证,就像你所做的那样。这样做的缺点是您需要在使用名称的任何地方执行此操作。 this隐含地是从属名称。
  • 用基类名限定它们,如X<T>::fooX<T>::bar .这也需要在您使用它们的任何地方完成,并且如果它们最终是虚拟方法,还会破坏虚拟分派(dispatch)机制。
  • 通过 using X<T>::foo; 将依赖名称放入非依赖 namespace 和 using X<T>::bar; .

或者,您可以使用 VC++ 进行编译,它不关心依赖名称和非依赖名称之间的区别。

关于c++ - 有没有办法避免在模板基类成员前面加上 `this` 前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25402716/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com