ホームページ  >  記事  >  バックエンド開発  >  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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。