53 votes

Modèle dans le modèle : pourquoi « '>>' devrait être '> >' dans une liste d’arguments de modèle imbriquée »

Je sais que lorsque nous utilisons un modèle à l’intérieur d’un autre modèle, nous devrions l’écrire comme ceci:

``

et si nous l’écrivons sans l’espace blanc:

``

nous obtiendrons une erreur:

'>>' doit être '> >' dans une liste d’arguments de modèle imbriquée

Je vois que c’est compréhensible, mais je ne peux m’empêcher de me demander, dans quels cas cela sera-t-il vraiment ambigu?

51voto

Johannes Schaub - litb Points 256113

Parfois, vous voulez que ce soit `` . Considérer

En C++03, cela analyse et crée avec succès un tableau de taille `` .

29voto

Armen Tsirunyan Points 59548

Ce ne sera jamais ambigu. Ceci est prouvé par le fait qu’en C ++0x, vous n’avez plus besoin d’écrire un espace entre les modèles `` de fermeture.

Le fait est que les compilateurs préféreraient tokeniser l’entrée aussi indépendamment du contexte que possible. Étant donné que C ++ n’est pas un langage indépendant du contexte de toute façon, l’ajout de ce seul cas spécial ne va pas rendre les choses particulièrement difficiles.

11voto

Dans la norme actuelle, la tokenisation est gourmande, elle sera donc traitée comme un seul jeton, de la même manière qu’elle sera analysée comme `` . Cela a changé et la nouvelle norme a changé. Bien que cela nécessite plus de travail de la part des implémenteurs du compilateur, il a été jugé que dans l’ensemble, cela en valait la peine (et certains compilateurs majeurs l’implémentent déjà en tant qu’extension de toute façon).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X