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

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

Linda Hamilton
Libérer: 2024-11-07 17:40:03
original
966 Les gens l'ont consulté

How Can You Declare Templated Structs/Classes as Friends in C  ?

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

Dans le domaine du C, déclarer des structures ou des classes basées sur un modèle comme amis peut présenter un obstacle lié à la syntaxe. Pour y parvenir, envisagez l'approche suivante :

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

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

Cette syntaxe semble se compiler avec succès. Cependant, il déclare toutes les instanciations de modèle de foo comme amies les unes des autres, quel que soit le paramètre de modèle qu'elles prennent. Cela peut ou non correspondre à votre cas d'utilisation prévu.

Si vous devez limiter l'amitié à des instanciations spécifiques uniquement, vous pouvez y parvenir en utilisant cette syntaxe :

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

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

Malheureusement, cela la syntaxe ne permet pas une déclaration générique incluant toutes les instanciations possibles de foo.

Par conséquent, si votre objectif est d'établir une amitié à travers toutes les instanciations du modèle foo, la deuxième approche utilisant la classe d'ami foo est la plus proche de vous. peut obtenir, compte tenu des contraintes de la syntaxe C.

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