Maison > développement back-end > C++ > Comment déclarer une classe ou une structure modèle comme amie ?

Comment déclarer une classe ou une structure modèle comme amie ?

Barbara Streisand
Libérer: 2024-11-12 21:47:01
original
931 Les gens l'ont consulté

How to Declare a Templated Class or Structure as a Friend?

Classe ou structure modèle comme déclaration d'ami

Lorsque vous essayez de déclarer une structure ou une classe modèle comme amie, vous pouvez rencontrer des erreurs de compilation. Par exemple, considérons le code suivant :

template <typename T>
struct foo
{
    template <typename S>
    friend struct foo<S>;

private:
    // ...
};
Copier après la connexion

Ce code ne parvient pas à se compiler avec un message d'erreur indiquant que plusieurs listes de paramètres de modèle ne sont pas autorisées. Cependant, vous souhaitez toujours que toutes les instanciations possibles de la structure du modèle foo soient amies de foo pour tout T.

Solution

Pour y parvenir, vous pouvez utiliser la déclaration suivante :

template <typename> friend class foo
Copier après la connexion

Cette déclaration signifie que toutes les instanciations de modèles de la classe foo seront amies de toutes autres instanciations de modèles de la foo class.

Note supplémentaire

La déclaration

template <typename>
friend struct foo;
Copier après la connexion

fonctionnera également, mais elle rend toutes les instanciations de modèles de la structure foo amies de l'un l'autre. C'est probablement le comportement que vous envisagez. Cependant, il convient de noter que les déclarations d'amis et les modèles ont une syntaxe quelque peu complexe.

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