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!