导入父类的所有变量

时间:2009-03-23 10:34:00

标签: c++ gcc templates scope

您可能已经注意到gcc的更高版本对标准(see this question

更严格

应使用全名调用模板类的所有继承成员,即。     ParentClass<T>::member而非member

但是我仍然有很多旧代码不尊重这一点。为每个类中的每个使用成员添加using ParentClass<T>::member非常痛苦。有没有办法做using ParentClass<T>::*之类的事情?我希望这比在g ++中停用此检查更好,但如果现在有办法,我该如何停用它?

修改

根据C ++ FAQ(谢谢......)这些是正确解决继承的成员变量名称的唯一方法:

  1. 将来电从f()更改为this->f()。由于这总是隐式依赖于模板,因此this->f是依赖的,因此查询将被推迟,直到模板实际实例化为止,此时将考虑所有基类。

  2. 插入using B<T>::f;在致电f()之前。

  3. 将来自f()的呼叫更改为B<T>::f()

  4. 所以现在正在寻找正确的开关来停用全名解析......

1 个答案:

答案 0 :(得分:6)

不是您的回答问题,但是can also write this->member代替ParentClass<T>::member。这通常更容易编写,并使编译器在正确的位置查找member