首頁  >  文章  >  後端開發  >  如何在 C 中存取模板化基底類別的公共成員?

如何在 C 中存取模板化基底類別的公共成員?

Barbara Streisand
Barbara Streisand原創
2024-11-01 15:12:31108瀏覽

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>

此巨集將為CDerived 中使用的所有CBase 成員自動產生必要的using 語句。

以上是如何在 C 中存取模板化基底類別的公共成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn