Maison > développement back-end > C++ > Pourquoi utiliser différents paramètres de modèle pour les classes d'amis dans les modèles imbriqués ?

Pourquoi utiliser différents paramètres de modèle pour les classes d'amis dans les modèles imbriqués ?

Mary-Kate Olsen
Libérer: 2024-11-14 20:50:02
original
944 Les gens l'ont consulté

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

Modèles de classe d'amis dans des modèles imbriqués

Considérez le scénario de définition d'un modèle de classe pour un arbre binaire (BT) et un élément dans l'arbre (BE). Lors de la déclaration de l'amitié entre ces classes, pourquoi est-il nécessaire d'utiliser un paramètre de modèle différent pour la classe amie par rapport à la classe contenant ?

En C , les paramètres de modèle ne peuvent pas s'observer mutuellement. Dans le cadre de modèles imbriqués, les paramètres de modèle du modèle interne doivent avoir des noms différents de ceux des paramètres de modèle du modèle externe.

Par exemple, dans le code suivant :

template<class T> class BE {
    T *data;
    BE *l, *r;
public:
    template<class U> friend class BT;
};
Copier après la connexion

Le paramètre de modèle U de la classe amie BT est utilisé pour le différencier du paramètre de modèle T de la classe BE. Ceci spécifie que BT est un ami de BE quels que soient les arguments du modèle de BT.

Cependant, si vous déclarez la classe d'ami comme suit :

template<class T> friend class BT;
Copier après la connexion

Cela implique que toute instanciation particulière de BT est un ami à toute instanciation particulière de BE. Pour spécifier une amitié plus spécifique, vous pouvez utiliser la syntaxe suivante :

template<typename T>
struct foo {
    friend class bar<T>;
};
Copier après la connexion

Cela indique que bar est un ami de foo uniquement lorsque l'argument de modèle de bar correspond à l'argument de modèle de foo. Dans votre cas, en utilisant la barre de classe d'amis; devrait suffire à établir la relation d'amitié souhaitée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal