【发布时间】:2010-10-14 22:41:41
【问题描述】:
您可能已经注意到,更高版本的 gcc 对标准更加严格 (see this question)
模板类的所有继承成员都应该使用全名来调用,即。
ParentClass<T>::member 而不仅仅是 member
但我仍然有很多不尊重这一点的旧代码。为每个班级中的每个使用过的成员添加using ParentClass<T>::member 非常痛苦。有没有办法做类似using ParentClass<T>::* 的事情?我希望这比在 g++ 中停用此检查更好,但如果现在有办法,我该如何停用它?
编辑:
根据 C++ FAQ(谢谢),这些是正确解决继承的成员变量名称的唯一方法:
将呼叫从
f()更改为this->f()。由于在模板中这始终是隐式依赖的,this->f是依赖的,因此查找会延迟到模板实际实例化,此时会考虑所有基类。插入
using B<T>::f;就在致电f()之前。将调用从 f() 更改为
B<T>::f()。
所以现在正在寻找正确的开关来停用全名解析...
【问题讨论】: