クラス テンプレートとテンプレート クラスの友人: メカニズムの詳細
要素クラス (BE) を使用して二分木 (BT) クラスを構築することを想像してください。 ) 各ノードを説明し、次の構造に似ています:
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: ... };
このセットアップでは、奇妙な癖。友人をテンプレート
この区別は、テンプレート シャドウイングの概念に由来します。テンプレート パラメーターは、ネストされたテンプレートの範囲内で相互に重複することはできません。したがって、ネストされたテンプレートには異なるパラメータ名が不可欠です。
次の構造を考えてみましょう:
template<typename T> struct foo { template<typename U> friend class bar; };
ここでは、bar は、それ自体のテンプレート引数に関係なく、foo のフレンドとして宣言されています。 bar
対照的に、次の宣言は:
template<typename T> struct foo { friend class bar<T>; };
bar のテンプレート引数が一致する場合、bar は foo の友人にすぎないことを意味しますフーズと一緒に。 bar
したがって、特定のシナリオでは、フレンドクラスバー
以上がクラス テンプレート内のフレンド テンプレート クラスに別のパラメータが必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。