Maison > développement back-end > C++ > Comment déclarer une structure ou une classe basée sur un modèle comme ami en C ?

Comment déclarer une structure ou une classe basée sur un modèle comme ami en C ?

Mary-Kate Olsen
Libérer: 2024-11-09 08:49:02
original
1011 Les gens l'ont consulté

How to Declare a Templated Struct or Class as a Friend in C  ?

Déclarer une structure ou une classe basée sur un modèle en tant qu'ami

En programmation C, il est possible de déclarer une structure ou une classe basée sur un modèle en tant qu'ami à une autre classe, permettant effectivement l'accès aux membres privés. Cependant, certains compilateurs, tels que VC8, peuvent rencontrer des erreurs lors de l'implémentation de cette fonctionnalité.

Syntaxe incorrecte :

Le code suivant tente de déclarer une structure modèle foo en tant que ami à toutes les autres instanciations de foo:

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

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

Cependant, cela entraînera l'erreur :

error C3857: 'foo<T>': multiple template parameter lists are not allowed
Copier après la connexion

Syntaxe correcte :

Pour déclarer correctement une structure ou une classe basée sur un modèle comme amie, utilisez la syntaxe suivante :

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

Cela permettra à toutes les instanciations de modèle de foo d'être amies les unes des autres, comme vous le souhaitez. Par conséquent, le code correct devrait être :

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

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

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