Bonjour à tous

Ça fait maintenant plusieurs jours que je planche sur un petit programme de calcul en C++, et maintenant je me retrouve bloqué depuis un moment sur la conception du programme

Voila, je vous explique mon problème :

Je souhaite representer un calcul par la classe suivante (c'est volontairement abrégé, c'est juste histoire de se donner une idée) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
class Operateur {
   public :
       Operateur(Element l, Element r) : left(l), right(r), result(null) {}
       Element getResult(){return result;}
       virtual void calc(){} = 0;
       /* cette fonction est à implémenter suivant les types d'elements manipulés */
 
   private :
      Element left;
      Element right;
      Element result;
};
Avec ça, je pourrais créer autant d'opérateurs que je veux (je suis très partisan de l'Open-Close).

Pour Element, j'avais au tout d'abord pensé à simplement créer une classe abstraite pure, qui ne posséderait que la méthode "getValue", afin de conserver l'Open-Close et donner à la possibilité à l'utilisateur de créer ses propres éléments et ses propres opérations.



Le problème vient de là : comment faire si l'on décide de créer (par exemple) un élément Frequency (dont getValue renverait un float) , et un élément NaturalInteger (dont getValue renverrait un int)

J'avais bien pensé à utiliser un template, mais le problème ne fait que ce déplacer, comment savoir quel type de données je vais manipuler dans les surcharges de calc() ?

J'avoue que là, je sèche totalement. Est-ce que l'un de vous pourrait m'aider ?

W. Bishop


PS : Pour les modos : si ce sujet n'est pas dans le bon thread, je m'en excuse et n'hésitez pas à le déplacer