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 ?
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; };
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;
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>; };
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
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!