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
Mary-Kate Olsenoriginal
2024-11-09 08:49:021019parcourir

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:
    // ...
};

Cependant, cela entraînera l'erreur :

error C3857: 'foo<T>': multiple template parameter lists are not allowed

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;

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:
    // ...
};

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!

Déclaration:
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