Maison > développement back-end > C++ > le corps du texte

Pourquoi utiliser différents paramètres de modèle pour les classes d'amis dans les modèles imbriqués ?

Mary-Kate Olsen
Libérer: 2024-11-14 20:50:02
original
835 Les gens l'ont consulté

Why Use Different Template Parameters for Friend Classes in Nested Templates?

Friend Class Templates in Nested Templates

Consider the scenario of defining a class template for a binary tree (BT) and an element within the tree (BE). When declaring the friendship between these classes, why is it necessary to use a different template parameter for the friend class compared to the containing class?

In C++, template parameters cannot shadow each other. In the context of nested templates, the template parameters of the inner template must have different names than the template parameters of the outer template.

For example, in the following code:

template<class T> class BE {
    T *data;
    BE *l, *r;
public:
    template<class U> friend class BT;
};
Copier après la connexion

The template parameter U of the friend class BT is used to differentiate it from the T template parameter of the BE class. This specifies that BT is a friend of BE regardless of BT's template arguments.

However, if you declare the friend class as follows:

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

This implies that any particular instantiation of BT is a friend to any particular instantiation of BE. To specify a more specific friendship, you can use the following syntax:

template<typename T>
struct foo {
    friend class bar<T>;
};
Copier après la connexion

This indicates that bar is a friend of foo only when bar's template argument matches foo's template argument. In your case, using friend class bar; should suffice to establish the desired friendship relationship.

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