继承模板化 C 类中的受保护和公共类成员可见性
当类模板继承时,继承中的公共成员可见性问题变得明显来自另一个类模板的成员,如提供的代码中所示。在没有显式地重新声明或重新定义任何公共成员的情况下,CDerived 继承了 CBase 的所有公共成员。
问题和解决方案
但是,将此代码模板化后,会发现 CBase 的公共成员在遵循最新 C 标准的编译器上,CDerived 变得不可见。可以使用多种解决方案解决此可见性问题:
现有解决方案的缺点
这些解决方案虽然有效,但也有其缺点:更简洁的解决方案
引入宏简化了解决方案 #3,减少了重复输入:<code class="cpp">#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> USING_CBASE(BYTES);</code>这段代码大大简化了 using 语句,提高了代码可读性并减少了重复编辑。
以上是为什么继承模板化 C 类时公共类成员不可见?的详细内容。更多信息请关注PHP中文网其他相关文章!