"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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++ ?

Publié le 2024-11-19
Parcourir:543

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 
struct foo
{
    template 
    friend class foo;

private:
    // ...
};

Cette syntaxe semble être compilée 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 
struct foo
{
    template 
    friend struct foo;

private:
    // ...
};

Malheureusement, cette 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 de modèle de foo, la deuxième approche utilisant la classe amie foo est la plus proche possible, compte tenu des contraintes de la syntaxe C.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3