使用继承的类模板避免成员不可见和源代码膨胀
当类模板 CDerived 从基类继承时会遇到问题当代码在启用标准 C 一致性的情况下编译时,类模板、CBase 和 CBase 的所有公共成员对 CDerived 不可见。
问题的解决方案:
解决方案 #1:显式限定
使用 CBase
解决方案#2:this->前缀
使用 this-> 对 CBase 成员的引用添加前缀,例如,Fn1() 变为 this->Fn1()。这也使成员可见,但再次需要详细的代码更改。
解决方案 #3:使用语句
在 CDerived 中添加 using 语句以导入 CBase 成员,例如,使用 CBase
解决方案#4:非标准许可模式
在编译器设置中禁用严格的 C 一致性以抑制名称查找问题。然而,这是一个脱离标准的全局解决方案,并且不可移植。
更简洁的解决方案#5:
减少解决方案#的冗长3、可以使用宏来生成必要的using语句。
实现:
包含Boost预处理器库并定义一个宏USING_ONE,用于生成单个using
定义另一个宏 USING_ALL,为所有指定的基成员生成一系列 using 语句。
在基类模板中,定义一个宏 USING_CBASE,为将在派生类模板中使用的所有受保护和公共成员生成 using 语句。
在派生类模板中,使用适当的 USING_CBASE 宏通过前面定义的宏导入必要的成员。此过程需要最少的搜索和输入,减少源代码膨胀,同时仍然保持可移植性。
以上是如何避免继承类模板中的成员不可见和源代码膨胀?的详细内容。更多信息请关注PHP中文网其他相关文章!