Maison > développement back-end > C++ > Comment déclarer des modèles de classe comme amis en C ?

Comment déclarer des modèles de classe comme amis en C ?

Linda Hamilton
Libérer: 2024-11-14 13:50:02
original
257 Les gens l'ont consulté

How Can You Declare Class Templates as Friends in C  ?

Déclarer des modèles de classe comme amis : une plongée plus approfondie

En C, il est possible de définir des classes comme amies d'autres classes, accordant l'accès aux membres privés quelle que soit l'encapsulation . Cependant, lorsqu'il s'agit de modèles de classe, comprendre les relations amicales sous-jacentes devient crucial.

Considérez l'exemple de code :

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:
...
};
Copier après la connexion

Ce code définit une classe BE représentant les éléments de l'arbre et une classe BT représentant un arbre binaire. Initialement, on a tenté de déclarer la classe d'amis comme :

template<class T> friend class BT;
Copier après la connexion

Cependant, cette approche a échoué. Pour comprendre pourquoi, il est essentiel de reconnaître que les paramètres d’un modèle ne peuvent pas se masquer mutuellement. Dans les modèles imbriqués, chaque niveau doit avoir des noms de paramètres de modèle uniques.

En revanche, considérez cette déclaration :

template<class T> class BE {
    template<class U> friend class BT<U>;
};
Copier après la connexion

Cela signifie que BT est un ami de BE quels que soient les arguments du modèle de BT. Chaque instance de BT, quel que soit le type qu'elle stocke, sera une amie de BE.

Alternativement, si la déclaration suivante est utilisée :

template<class T> class BE {
    friend class BT<T>;
};
Copier après la connexion

Cela signifie que BT n'est qu'un ami de BE lorsque l'argument du modèle de BT correspond à celui de BE. Dans ce cas, par exemple, BT serait un ami de BE, mais pas de BE ou BE.

Dans le cas de l'exemple d'arbre binaire, déclarer la classe amie comme classe amie BT; serait suffisant pour assurer la relation souhaitée entre BT et BE.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal