从模板化父类访问继承变量
提供的代码片段说明了继承类 Bar 尝试访问其受保护变量的场景父类Foo,它是一个模板类。然而,编译器会产生错误,导致人们对编译器是否遵守标准感到困惑。
根据 C 标准,模板中的非限定名称被认为是非依赖的,必须在定义模板时解决。由于专门的基类模板在模板定义期间可能不可用,因此未解析的不合格名称会导致错误。
这适用于基类中声明的变量和函数,如 Bar 可以访问的示例所示a using 限定名称或 using 声明。后者允许派生类内进行不合格的访问,从而解决了最初的错误。
例如,以下代码修改解决了该问题:
template<class T> int Bar<T>::Perna(int u) { int c = Foo<T>::a * 4; // Qualified name c = this->a * 4; // Pointer to own instance using Foo<T>::a; c = a * 4; // Using declaration }
通过澄清查找规则并提供替代解决方案,这个解释强调了模板解析的细微差别,并帮助开发人员理解编译器行为背后的基本原理。
以上是继承类如何访问 C 中模板化父类中受保护的变量?的详细内容。更多信息请关注PHP中文网其他相关文章!