ホームページ > バックエンド開発 > C++ > テンプレート クラスが別のテンプレート パラメーターを使用してフレンド テンプレート クラスを宣言する必要があるのはなぜですか?

テンプレート クラスが別のテンプレート パラメーターを使用してフレンド テンプレート クラスを宣言する必要があるのはなぜですか?

Linda Hamilton
リリース: 2024-11-22 08:49:10
オリジナル
530 人が閲覧しました

Why Does a Templated Class Need to Declare a Friend Templated Class with a Different Template Parameter?

フレンド テンプレート クラスを使用したテンプレート クラス: メカニズムの解読

このシナリオでは、バイナリ ツリー クラス テンプレート (BT) とクラス テンプレート (BE) を定義します。 ) ツリーの要素を表します。フレンド テンプレートを BT として宣言するという特殊な要件が発生します。 BTの代わりに。この動作を調査すると、クラス テンプレートとフレンド関係を徹底的に理解することができます。

ネストされたテンプレートとシャドウイング

最初に、フレンド テンプレートを template として宣言しようとします。フレンドクラスBT;。ただし、ネストされたテンプレートのテンプレート パラメーターに同じ名前を付けることはできないため、これは禁止されています。ネストされたテンプレートでは、個別のテンプレート パラメーター名を使用する必要があります。

フレンド関係の定義

テンプレート を宣言するとき。フレンド クラス BT; の場合、BT のテンプレート引数に関係なく、BT と BE の間にフレンド関係を確立します。これは、BT のインスタンス化はすべて、BE のインスタンス化のプライベート メンバーにアクセスできることを意味します。

フレンド関係を、BE と同じテンプレート引数を使用する BT のインスタンス化のみに制限したい場合は、次のように宣言する必要があります。フレンドは次のようになります:

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

あなたの特定のケースでは、フレンドクラスバーを宣言します

; BE クラス内で十分です。

以上がテンプレート クラスが別のテンプレート パラメーターを使用してフレンド テンプレート クラスを宣言する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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