Bonjour,
Voici mon problème : J'essaie de faire une structure de proposition générique. C'est à dire qu'une définition usuelle de la structure de Proposition (en notation Ocaml approximatif) pourrait-être
Proposition =
|Variable(Chaine de caractere)
|AND(Proposition*Proposition)
|OR(Proposition*Proposition)
|FORALL(Variable * Proposition)
...
Mon idée est de ne pas fixer les constructeurs :
-Soit la liste des constructeurs possibles est passée en paramètre template à ma structure de Proposition (cas 1)
-Soit la liste des constructeurs possibles est passée à l'éxecution (cas 2)
Je ne sais pas encore si je veux être dans le cas 1 ou dans le cas 2 : le cas 1 apporte plus de sécurité au niveau du code et de meilleures performances (je ne sais pas encore si j'en ai besoin) mais ne permet pas à l'utilisateur de modifier les constructeurs.
Mon idée pour le cas 1 :
Avec le constructeur X qui deviendrait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template<typename S1, typename ...SN> struct Prop { S1* cons;//NULL if not this constructor Prop<...SN> othercases; };
Il me semble que ceci fonctionnerait mais serait très désagréable à utiliser. Avez-vous une autre solution à proposer (ou une raison pour laquelle ceci ne marcherait pas ?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 struct X { std::string name = "X"; Type1 parameter1; Type2 parameter2; ... TypeN parameterN; };
Pour le cas 2, je ne vois pas d'autre manière que de passer par des void* et de définir un int pour chacun des types utilisables... :
Y a t-il une meilleur implémentation à laquelle vous pensez ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 enum TypeID { INT, PROP, CHAR, STRING, VARIABLE, ... } struct Constructor { std::vector<TypeID> parameters; std::string name; }; std::vector<Constructor> constructorList; struct Prop { Constructor c; void*data;//Qu'on interprète à partir des types de c };
Merci pour votre aide.
Partager