ホームページ > バックエンド開発 > C++ > C でクラス テンプレートをフレンドとして宣言するにはどうすればよいですか?

C でクラス テンプレートをフレンドとして宣言するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-14 13:50:02
オリジナル
258 人が閲覧しました

How Can You Declare Class Templates as Friends in C  ?

クラス テンプレートをフレンドとして宣言する: 詳しい説明

C では、クラスを他のクラスのフレンドとして定義し、カプセル化に関係なくプライベート メンバーへのアクセスを許可することができます。 。ただし、クラス テンプレートを扱う場合、基礎となる友人関係を理解することが重要になります。

コード例を考えてみましょう。

template<class T> class BE {
    T *data;
    BE *l, *r;
public:
    template<class U> friend class BT;
};

template<class T> class BT {
    BE<T> *root;
public:
...
private:
...
};
ログイン後にコピー

このコードは、ツリー要素を表すクラス BE と、ツリー要素を表すクラス BT を定義します。二分木。当初、フレンド クラスを

template<class T> friend class BT;
ログイン後にコピー

として宣言しようとしましたが、このアプローチは失敗しました。その理由を理解するには、テンプレート パラメーターが相互にシャドウし合うことができないことを認識することが不可欠です。ネストされたテンプレートでは、各レベルに一意のテンプレート パラメーター名が必要です。

対照的に、次の宣言を考えてみましょう。

template<class T> class BE {
    template<class U> friend class BT<U>;
};
ログイン後にコピー

これは、BT のテンプレート引数に関係なく、BT が BE の友達であることを示します。 BT のすべてのインスタンスは、格納されている型に関係なく、BE のフレンドになります。

または、次の宣言が使用される場合:

template<class T> class BE {
    friend class BT<T>;
};
ログイン後にコピー

これは、BT が単なるBT のテンプレート引数が BE と一致する場合、BE の友人。この場合、例えば、BTは、 BE の友達になりますが、BE の友達ではありません。

バイナリ ツリーの例の場合、フレンド クラスをフレンド クラス BT として宣言します。 BT と BE の間に望ましい関係を提供するには十分です。

以上がC でクラス テンプレートをフレンドとして宣言するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート