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
Barbara Streisandoriginal
2024-11-12 21:47:01937parcourir

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

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

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;

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!

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