模板化类继承中的公共成员不可见性
考虑以下 C 代码:
<code class="cpp">class CBase { public: char Arr[32]; int Fn1(); int Fn2(); }; class CDerived : public CBase { public: int FnSum(); };</code>
在此代码中, CDerived 继承了 CBase 的公共成员。但是,如果此代码是模板化的,使 Arr 和函数模板化,则 CBase 的公共成员对 CDerived 不可见。
解决方案
为了解决此问题,有几种方法存在解决方案:
解决方案存在问题
解决方案 #1 和 #2 需要在代码中添加详细内容,导致源代码膨胀和重复。解决方案#4,禁用严格一致性,不可移植并且脱离了 C 标准。
改进的解决方案
为了简化代码,可以使用宏来自动化解决方案 #3 中添加 using 语句:
<code class="cpp">#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>
此宏将为所有成员自动生成必要的 using 语句CDerived 中使用的 CBase。
以上是如何在 C 中访问模板化基类的公共成员?的详细内容。更多信息请关注PHP中文网其他相关文章!