Maison  >  Article  >  développement back-end  >  « Link* next » utilise-t-il le nom de classe injecté dans les modèles C ?

« Link* next » utilise-t-il le nom de classe injecté dans les modèles C ?

DDD
DDDoriginal
2024-11-02 22:18:30749parcourir

Does `Link* next` Use the Injected Class Name in C   Templates?

Utilisation du nom de classe dans un modèle de classe sans paramètres de modèle

Considérez le code suivant tiré d'un livre C :

<code class="cpp">template <typename E> class Link {
    ...
    Link* next;  // this line may be confusing
    ...
};</code>

Dans ce code, le membre next est déclaré sans spécifier l'argument de modèle E, ce qui soulève des inquiétudes quant à son exactitude. Ne devrait-il pas être Link* ensuite ?

Explication

Cela s'explique par le concept de « nom de classe injecté ». Conformément à la norme C [temp.local], lorsqu'il est utilisé sans argument de modèle, le nom de classe dans le modèle de classe est équivalent au nom de classe suivi des paramètres du modèle entourés de crochets angulaires. Par conséquent, dans ce cas, Link* est équivalent à Link*.

Cette règle est destinée à des fins pratiques, garantissant que le nom de classe au sein de la classe fait référence à la classe elle-même et non à une entité externe avec le même nom. Dans le cas des modèles de classe, il fournit une notation abrégée, en particulier lorsqu'il s'agit de listes d'arguments de modèles étendues.

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