Maison > développement back-end > C++ > Comment déclarer des structures/classes modélisées comme amis en C ?

Comment déclarer des structures/classes modélisées comme amis en C ?

Mary-Kate Olsen
Libérer: 2024-11-07 08:38:02
original
814 Les gens l'ont consulté

How to Declare Templated Structs/Classes as Friends in C  ?

Déclarer des structures/classes basées sur un modèle comme amis

En C, on peut rencontrer des difficultés lors de la déclaration de structures ou de classes basées sur un modèle comme amis d'autres structures basées sur un modèle ou des cours. Considérez le scénario suivant :

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

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

La compilation de ce code dans Visual C 8 peut déclencher l'erreur C3857 : « plusieurs listes de paramètres de modèle ne sont pas autorisées. » Cela résulte de l'incapacité du compilateur à gérer la déclaration de modèle imbriquée dans la déclaration d'ami.

Pour résoudre ce problème, on peut utiliser la syntaxe simplifiée :

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

Cette syntaxe déclare toutes les instances de la structure foo basée sur un modèle en tant qu'amis du modèle foo englobant. Il atteint efficacement l'objectif visé de rendre toutes les instanciations possibles de foo amis les uns des autres.

Notez que cette approche diffère de la déclaration originale en ce sens qu'elle rend tous les modèles amis les uns des autres, quels que soient les arguments spécifiques du modèle. . Cela peut ou non être le comportement souhaité, en fonction des exigences spécifiques.

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