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
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!