Maison  >  Article  >  développement back-end  >  Comment définir des relations entre amis dans des classes de modèles avec différents arguments de modèle ?

Comment définir des relations entre amis dans des classes de modèles avec différents arguments de modèle ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-17 09:35:04718parcourir

How to Define Friend Relationships in Template Classes with Different Template Arguments?

Explorer les modèles de classe avec des amis de classe modèle

Lors de la définition d'une classe d'arbre binaire (BT) et de sa classe d'éléments (BE), il est nécessaire d'établir une relation d'amitié pour que BT puisse accéder aux membres privés de BE. Cependant, il est crucial de comprendre les mécanismes sous-jacents pour définir correctement la relation.

À l'origine, vous avez tenté de déclarer la relation amicale comme modèle classe d'amis BT. Mais cette syntaxe introduit un conflit de nom avec le paramètre template de BE. Les paramètres de modèle dans les modèles imbriqués doivent avoir des noms distincts.

Au lieu de cela, vous devez utiliser des noms de paramètres de modèle différents, tels que :

template<class T> class BE {
  template<class U> friend class BT;
};

Cette déclaration indique que toute classe BT, quel que soit son modèle arguments, est un ami de toutes les classes BE avec des arguments de modèle correspondants.

Considérez les exemples suivants pour clarifier davantage les différents types d'amis relations :

template<typename T>
struct foo {
  template<typename U>
  friend class bar;
};

Dans ce cas, bar est un ami de foo quels que soient les arguments du modèle de bar. Toute spécialisation de bar serait amie de toute spécialisation de foo.

template<typename T>
struct foo {
  friend class bar<T>;
};

Ici, bar n'est un ami de foo que si son argument de modèle correspond à celui de foo. Donc, seulement bar serait un ami de foo.

Dans votre scénario spécifique, la classe d'amis bar; devrait suffire car il permet à toute spécialisation de bar d'accéder aux membres privés de BE tant que son argument de modèle correspond à la classe BE correspondante.

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:
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