Pollux
:
- que contient _data ? pkoi est-ce que tu utilises malloc() et pas new() pour le créer ? et est-ce que tu ne t'en tirerais pas plus facilement/proprement avec un union ou bien un template plutôt que de faire des casts à partir de "void *" ?
Ben _data contient soit NULL, soit un pointeur vers une donnée de type quelquonque qui ne regarde pas l'objet. J'utilise malloc parce que ce n'est pas un pointeur vers un objet, mais vers un bloc de mémoire associé. Une union ? je pense que je vois ce que tu veux dire, en effet, c'est possible. Une template? je ne vois pas l'intérêt dans ce cas.
- et tu utilises trop de pointeurs... Pourquoi "std::string *" et pas "const std::string &" ?
Heu... à vrai dire, je n'en ai aucune idée

J'avais tout d'abord écrit le code avec une référence, et pour une raison x dont je ne me souviens plus, je l'ai remplacé par un pointeur. Mais ça fait revient quasiment au même de toute façon
nitro
:
- NULL n'existe pas en C++, on utilise 0
Hmm, c possible, mais je préfère mettre NULL quand même. Et puis dans tous les cas, si jamais ça posait des problèmes, ce n'est pas le + difficile à corriger (soit par une #define NULL 0, soit par un remplacement de texte

)
- on préfère mettre la section "public" en premier dans la classe, pour une lecture immédiate de l'interface
J'y penserait

Mais ça me paraissait plus naturel de mettre la section private en premier
- si TOKENS n'est pas une macro, éviter les majuscules
TOKENS est un énum
- éviter les '_' au début des identifiants, on peut toujours s'en sortir sans :
Hmm, ba j'utilise généralement '_' pour les déclarations privées dans tous les languages
PpHd
:
free(NULL); est parfaitement legal (Ne fait rien).
Ah, ok, je vais virer le test alors
...
En ce qui concerne l'héritage, je ne sais pas si c'est vraiment utile (ça serait évidemment plus dans l'esprit C++

), car ça n'améliorerait pas le reste du programme. (Il y aurait toujours besoin de token::getType() pour connaître le type des données, peu importe comment je m'y prends

)