Design pattern c++ [Résolu]

Signaler
Messages postés
3
Date d'inscription
mardi 25 janvier 2011
Statut
Membre
Dernière intervention
17 décembre 2012
-
Messages postés
3
Date d'inscription
mardi 25 janvier 2011
Statut
Membre
Dernière intervention
17 décembre 2012
-
Bonjour,
Je fais un petit parser avec les design pattern.
Alors j'ai un héritage des classes Integer , FLoat...d'une interface Type.
Le probleme,j'ai besoin d'une methode: Type_retour getvaleur() qui retourne soit un int , float, double..qui sont des types prédefinis.
L'idéal serait d'avoir template<typename T> getvaleur()= 0; dans l'interface Type.
sauf que dans Type toutes les méthodes sont virtuelles pures et une méthode avec template ne peut pas etre virtuelle pure.

Quelqu'un aurait une suggestion pour moi juste pour contourner ce problème.

2 réponses

Messages postés
3840
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 février 2021
119
Bonjour.

Ce que tu cherches à faire n'est effectivement pas possible. Lorsque l'on a une virtuelle pure, on renvoit la même chose. Sinon, c'est qu'une virtuelle pure n'est pas la bonne solution, et qu'il y a un problème de conception.
Généralement, si tu cherches à faire un parser, tu auras des noeuds de grammaire, dont effectivement des types. Pour résoudre la problématique auquel tu es confronté, on utilise un design pattern visitor.
Je t'invite à t'inspirer de ma source: http://www.cppfrance.com/codes/COMPILATEUR-PSEUDO-PASCAL_49318.aspx
(Notamment la partie parsing).


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
3
Date d'inscription
mardi 25 janvier 2011
Statut
Membre
Dernière intervention
17 décembre 2012

vous avez raison les visitors car c ce que j'utilise pour évaluer les expressions mais je pensais pas que se serait nécessaire dans ce cas.
Mais je vais faire comme ca....

merci beaucoup vous avez fais un sacré travail dans votre code