hierarchie polymorphique , instanciation dynamique sans if - C++ - Programmation
Marsh Posté le 29-05-2009 à 22:20:03
les templates c'est pour les valeurs constantes connues à la compilation, ici tu lis des variables depuis un fichier.
Si ton paramètre est un entier, tu as le switch ou le tableau de pointeurs de fonctions, mais bon c'est lourd pour pas grand chose. Quel est le problème avec les if ?
Marsh Posté le 30-05-2009 à 00:59:17
ReplyMarsh Posté le 30-05-2009 à 08:44:08
une AF avec des if ? ton implantation est foireuse car ca devrait etre basé sur une association id->fonction de generation
Marsh Posté le 31-05-2009 à 22:01:48
je suis toujours obliger de ifé en sorti de l'AF pour savoir quel type d'objet je veux construire
if(param1)
AF<baseCLass,DerivedClass>.create
else
AF<baseClass,Derived2class>.create
Marsh Posté le 31-05-2009 à 22:31:46
Un choix qui dépend d'une condition, tu peux tourner ça comme tu veux, c'est soit:
- template, spécialisation
- if
Marsh Posté le 01-06-2009 à 01:51:57
Glock 17Pro a écrit : je suis toujours obliger de ifé en sorti de l'AF pour savoir quel type d'objet je veux construire |
ton code d'appel à ta factory devrait plutôt ressembler à ca :
BaseClass* instance = AF<BaseClass>::Create( param1 );
param1 étant l'id (par exemple une string) et tes deux classes dérivées ayant été au préalable enregistrées dans ta factory en donnant l'association id / classe dérivée. Du coup, ton if inélégant se transforme en recherche dans une map de ta factory, et là, tout est beau et joyeux
Marsh Posté le 02-06-2009 à 20:25:24
exact en faite le code que j'ai fournit me sert à enregistrer. et pour créer je fais comme ton code. Cependant je n'avais pas forcément envie d'enregistrer dans ma factory une classe qui ne sera jamais créer, d'où mes if
Marsh Posté le 29-05-2009 à 19:55:51
Hello,
Question architecture logicielle.
Soit une architecture classique mère et deux filles.
le choix de la fille dépend d'un paramètre contenu dans un fichier.
Ma question c'est, suis-je obliger d'avoir recours à un vilain if pour instancier corectement le pointeur sur la classe de base ?
if(param =1)
new fille1
else
new fille2
je peux pas m'en sortir avec des templates ou autrechose ?
Merci
Message édité par Glock 17Pro le 29-05-2009 à 20:02:05