"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-18
Parcourir:520

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

Exploration des modèles de classe avec des amis de classe de modèles

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 d'amitié en tant que classe d'amis template 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 BE {
  template friend class BT;
};

Cette déclaration indique que toute classe BT, quels que soient ses arguments de modèle, est l'amie de toutes les classes BE avec des arguments de modèle correspondants.

Considérez les exemples suivants pour clarifier davantage les différents types. des relations amicales :

template
struct foo {
  template
  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
struct foo {
  friend class bar;
};

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

Dans votre scénario spécifique, la classe d'ami 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3