Maison  >  Article  >  développement back-end  >  Pourquoi une classe modèle doit-elle déclarer une classe modèle amie avec un paramètre de modèle différent ?

Pourquoi une classe modèle doit-elle déclarer une classe modèle amie avec un paramètre de modèle différent ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-22 08:49:10463parcourir

Why Does a Templated Class Need to Declare a Friend Templated Class with a Different Template Parameter?

Classe modèle avec classe basée sur un ami : déchiffrer les mécanismes

Dans ce scénario, vous définissez un modèle de classe d'arbre binaire (BT) et un modèle de classe (BE ) qui représente un élément de l'arbre. Vous rencontrez une exigence particulière pour déclarer le modèle d'ami comme BT au lieu de BT. Une enquête sur ce comportement conduit à une compréhension approfondie des modèles de classe et des relations entre amis.

Modèles imbriqués et observation

Au départ, vous essayez de déclarer le modèle d'ami comme template classe d'amis BT ;. Cependant, cela est interdit car les paramètres des modèles imbriqués ne peuvent pas avoir le même nom. Les modèles imbriqués doivent utiliser des noms de paramètres de modèle distincts.

Définir les relations entre amis

Lorsque vous déclarez un modèle classe d'ami BT ;, vous établissez une relation d'amitié entre BT et BE, quels que soient les arguments de modèle de BT. Cela signifie que toute instanciation de BT peut accéder aux membres privés de toute instanciation de BE.

Si vous souhaitez limiter la relation d'amitié aux seules instanciations de BT qui utilisent le même argument de modèle que BE, vous devez déclarer l'ami comme suit :

template<class T> friend class bar<T>;

Dans votre cas spécifique, déclarer la classe ami bar; au sein de la classe BE devrait suffire.

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