Maison >développement back-end >C++ >Pourquoi ai-je besoin d'un paramètre distinct pour une classe de modèle d'ami dans un modèle de classe ?
Modèle de classe avec un ami de classe modèle : Plonger dans la mécanique
Imaginez construire une classe d'arbre binaire (BT) avec une classe d'éléments (BE ) décrivant chaque nœud, ressemblant à la structure suivante :
template<class T> class BE { T *data; BE *l, *r; public: template<class U> friend class BT; }; template<class T> class BT { BE<T> *root; public: ... private: ... };
Cette configuration rencontre une curieuse bizarrerie. Vous tentez de déclarer l'ami comme modèle
Cette distinction découle du concept d'observation de modèle. Les paramètres de modèle ne peuvent pas se dupliquer dans le cadre des modèles imbriqués. Par conséquent, différents noms de paramètres sont indispensables pour les modèles imbriqués.
Considérez les constructions suivantes :
template<typename T> struct foo { template<typename U> friend class bar; };
Ici, bar est déclaré comme ami de foo quels que soient ses propres arguments de modèle. Toutes les variantes de bar, qu'elles soient bar
En revanche, la déclaration suivante :
template<typename T> struct foo { friend class bar<T>; };
Implique que bar n'est qu'un ami de foo lorsque l'argument de modèle de bar s'aligne avec foo. Seules les barres
Par conséquent, dans votre scénario particulier, en adoptant la forme Friend Class Bar
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!