首页 >后端开发 >C++ >继承类如何访问 C 中模板化父类中受保护的变量?

继承类如何访问 C 中模板化父类中受保护的变量?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-06 20:16:12612浏览

How Can Inherited Classes Access Protected Variables in Templated Parent Classes in C  ?

从模板化父类访问继承变量

提供的代码片段说明了继承类 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn