首页  >  文章  >  后端开发  >  如何避免继承类模板中的成员不可见和源代码膨胀?

如何避免继承类模板中的成员不可见和源代码膨胀?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-01 05:38:27116浏览

How Can I Avoid Member Invisibility and Source Code Bloat in Inherited Class Templates?

使用继承的类模板避免成员不可见和源代码膨胀

当类模板 CDerived 从基类继承时会遇到问题当代码在启用标准 C 一致性的情况下编译时,类模板、CBase 和 CBase 的所有公共成员对 CDerived 不可见。

问题的解决方案:

解决方案 #1:显式限定

使用 CBase:: 对 CDerived 中的 CBase 成员进行前缀引用,例如,Fn1() 变为 CBase::Fn1()。这会强制在基类范围内进行名称查找,从而使成员可见。然而,这个解决方案需要在代码中添加许多冗长的内容,导致源代码膨胀。

解决方案#2:this->前缀

使用 this-> 对 CBase 成员的引用添加前缀,例如,Fn1() 变为 this->Fn1()。这也使成员可见,但再次需要详细的代码更改。

解决方案 #3:使用语句

在 CDerived 中添加 using 语句以导入 CBase 成员,例如,使用 CBase::Fn1;使用 CBase::Fn2;。这只需要在 CDerived 中使用每个成员一个 using 语句,但不存在导入所有成员的一揽子语句。

解决方案#4:非标准许可模式

在编译器设置中禁用严格的 C 一致性以抑制名称查找问题。然而,这是一个脱离标准的全局解决方案,并且不可移植。

更简洁的解决方案#5:

减少解决方案#的冗长3、可以使用宏来生成必要的using语句。

实现:

包含Boost预处理器库并定义一个宏USING_ONE,用于生成单个using

定义另一个宏 USING_ALL,为所有指定的基成员生成一系列 using 语句。

在基类模板中,定义一个宏 USING_CBASE,为将在派生类模板中使用的所有受保护和公共成员生成 using 语句。

在派生类模板中,使用适当的 USING_CBASE 宏通过前面定义的宏导入必要的成员。此过程需要最少的搜索和输入,减少源代码膨胀,同时仍然保持可移植性。

以上是如何避免继承类模板中的成员不可见和源代码膨胀?的详细内容。更多信息请关注PHP中文网其他相关文章!

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