加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在派生类中访问受保护的成员

发布时间:2020-12-16 05:59:38 所属栏目:百科 来源:网络整理
导读:我在这里有一个旧的代码库,在那里他们使用了保护的成员变量.这是否是一个好主意可以讨论.但是,代码必须使用 gcc3编译. 我有一个派生模板类Bar,使用受保护的成员x从类模板Foo这样 template class Something class Foo { public: // stuff... protected: some:
我在这里有一个旧的代码库,在那里他们使用了保护的成员变量.这是否是一个好主意可以讨论.但是,代码必须使用 gcc3编译.
我有一个派生模板类Bar,使用受保护的成员x从类模板Foo这样
template <class Something> class Foo {  
public:  
// stuff...  
protected:  
  some::type x;  
}

template <class Something> Bar : Foo<Something> {
public:
  void cleanup();
}

在清理()的方法声明中,有一些与x完成的事情

template <class Something> void Bar<Something>::cleanup() {
  doSomeThingCleanUpLike (x);
}

这不适用于gcc4,尽管它应该与gcc3一起使用.当我改变它时它工作

doSomeThingCleanUpLike (this->x);

为什么会这样?

解决方法

在派生类中使用的表达式x通过标准中的规则不依赖于派生类的任何模板参数.因此,查找发生在模板定义的上下文中,而不是在使用/实例化的过程中.即使模板的模板基类似乎是可见的,因为它是一个模板类,可能使用的特定实例可能涉及专用模板,因此基类模板定义不能用于名称查找.

通过将表达式更改为 – > x,您将使其成为依赖表达式(类模板中的这种方式始终取决于模板参数).这意味着查找将发生在实例化上下文中,此时基类完全已知且其成员可见.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读