首页 >后端开发 >C++ >如何在 C 中访问模板化基类的公共成员?

如何在 C 中访问模板化基类的公共成员?

Barbara Streisand
Barbara Streisand原创
2024-11-01 15:12:31189浏览

How Can You Access Public Members of a Templated Base Class in C  ?

模板化类继承中的公共成员不可见性

考虑以下 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: 为所有添加前缀使用 CBase:: 对 CBase 成员的引用,其中 BYTES 是模板参数。
  • 解决方案 #2: 在所有对 CBase 成员的引用前加上 this-> 前缀。
  • 解决方案 #3: 使用 CDerived 中的 using 语句来声明所有需要的CBase 成员。

解决方案存在问题

解决方案 #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中文网其他相关文章!

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