ホームページ > バックエンド開発 > C++ > ネストされたテンプレートのフレンド クラスに異なるテンプレート パラメーターを使用するのはなぜですか?

ネストされたテンプレートのフレンド クラスに異なるテンプレート パラメーターを使用するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-14 20:50:02
オリジナル
933 人が閲覧しました

Why Use Different Template Parameters for Friend Classes in Nested Templates?

ネストされたテンプレートのフレンド クラス テンプレート

バイナリ ツリー (BT) とツリー内の要素 (BE) のクラス テンプレートを定義するシナリオを考えてみましょう。これらのクラス間のフレンドシップを宣言する場合、フレンド クラスには、それを含むクラスとは異なるテンプレート パラメーターを使用する必要があるのはなぜですか?

C では、テンプレート パラメーターは相互にシャドウできません。ネストされたテンプレートのコンテキストでは、内側のテンプレートのテンプレート パラメーターは、外側のテンプレートのテンプレート パラメーターとは異なる名前を持つ必要があります。

たとえば、次のコードでは:

template<class T> class BE {
    T *data;
    BE *l, *r;
public:
    template<class U> friend class BT;
};
ログイン後にコピー

フレンドクラス BT のテンプレート パラメータ U は、BE クラスのテンプレート パラメータ T と区別するために使用されます。これは、BT のテンプレート引数に関係なく、BT が BE のフレンドであることを指定します。

ただし、フレンド クラスを次のように宣言すると、

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

これは、BT の特定のインスタンス化がすべてであることを意味します。 BE の特定のインスタンス化のフレンド。より具体的な友情を指定するには、次の構文を使用できます。

template<typename T>
struct foo {
    friend class bar<T>;
};
ログイン後にコピー

これは、bar のテンプレート引数が foo のテンプレート引数と一致する場合にのみ、bar が foo の友人であることを示します。あなたの場合、フレンドクラスバー;を使用します。望ましい友情関係を確立するには十分です。

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

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