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
Linda Hamiltonoriginal
2024-11-07 17:40:03941parcourir

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

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

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!

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