Bonsoir a tous,
(desole pour les accents, qwerty oblige)
apres un week end de recherche je me suis resolu a venir vous demander de l'aide.
Je bloque sur une histoire de dynamic_cast d'une classe qui m'est retournee par une fonction exportee d'une librairie partagee (..ouf)
Je m'explique.
Le core du programme doit pouvoir loader des modules (.so - je travail sous linux la). Ces modules sont tous issus d'une interface generique de cette maniere la:
IModule
--> IModuleTypeA
--> IModuleTypeB
--> IModuleTypeC
(ou IModuleTypeA, TypeB, et TypeC, heritent de IModule).
ensuite, dans chaque .so, l'utilisateur herite d'un des types de module (disons TypeA), et implemente les methodes heritees.
Bref une architecture tres classique d'heritage.
Dans le core du programme, chaque module qui est charge est stocke dans une std::list<IModule*>.
Plus tard lors de l'execution du programme, je souhaite acceder a des methodes propres a chaque Type de module en "down-castant" un IModule* dans son IModuleType'X' (en considerant que je sais son type pour faire le bon dynamic cast).
Ceci est donc une utilisation relativement classique de l'heritage, a l'exception pret du fait que la classe qui est implementee viens d'une librairie partagee.
Le probleme est qu'il m'est impossible de dynamic_caster mon IModule* en IModuleTypeA. A noter qu'une typeid sur mon IModule* en le dereferencant me renvoi le bon type de la bonne classe (celle qui est contenue dans le module).
J'ai fait pas mal de tests, et la pour l'instant je seche.
Si quelqu'un avait un debut de piste, aucune de mes recherches sur le net n'ayant ete fructueuses.
Merci d'avance a tous.
Bonne soiree.
Partager