使用继承的类模板避免公共成员不可见和源代码重复
在面向对象编程中,继承允许类继承属性和方法来自他们的父类。但是,当引入类模板时,由于严格遵守 C 标准,派生类可能无法访问公共成员。尝试在派生类中引用公共成员时,此问题可能会导致问题。
针对此问题提出了四种现有解决方案:
虽然这些解决方案可以解决可访问性问题,但它们也有潜在的缺点,例如冗长的代码、抑制虚拟调用和不可移植性。
建议的增强解决方案
为了改进现有解决方案,可以利用宏来简化解决方案#3:
<code class="c++">#include <boost/preprocessor.hpp> #define USING_ONE(r, base, member) \ using base::member; #define USING_ALL(base, ...) \ BOOST_PP_SEQ_FOR_EACH(\ USING_ONE, base, \ BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \ ) // Near CBase<BYTES> #define USING_CBASE(param) USING_ALL(CBase<param>, Arr, Fn1, Fn2, Fn3, Fn4, Fn5) // In CDerived<BYTES>, in a `public:` section USING_CBASE(BYTES);</code>
此方法需要添加CBase
此解决方案通过将 using 语句封装到宏中,解决了解决方案 #3 的问题,例如重复代码。它还通过符合 C 标准来保持可移植性。这个增强的解决方案提供了一种更简洁、更有效的方法来避免继承类模板中公共成员不可见和源代码重复。
以上是如何避免继承类模板中公共成员不可见和源代码重复?的详细内容。更多信息请关注PHP中文网其他相关文章!