Bonjour,
Je développe actuellement un programme qui a pour but de modéliser des systèmes en interaction. Pour l'instant, il s'inspire de ce tutorial (les modules étant ici remplacer par des systèmes). Dans mon application, un système est un objet pouvant recevoir des messages (éventuellement d'autres systèmes) et les traiter.
Ma bibliothèque possède actuellement trois interfaces :
- ISystem : modélise un système pouvant recevoir des évènements
- IEvent : représente les évènements envoyés aux systèmes
- ISystemCore : correspond à la logique d'exécution d'un système
Et une classe :
- System : classe héritant d’ISystem, construit autour d'un ISystemCore et pouvant recevoir des évènements
Avec ces interfaces et cette classe, un système peut être décomposé en deux parties avec d'une part la réception des messages et d'autre part leur traitement et l'évolution de celui-ci.
Actuellement une première application a été développée. Elle contient deux classes abstraites : ASystemCore et AEvent, héritant respectivement de ISystemCore et IEvent, ainsi que deux "SystemCore" et deux "Event" qui eux héritent de ASystemCore et AEvent.
Cette construction permet aux "SystemCore" et aux "Event" de posséder des méthodes communes (héritées de ASystemCore et AEvent) permettant l'identification automatique des objets qui leurs sont passés en paramètre.
Jusqu'ici tout fonctionne, mais je ne suis pas très satisfait de mes interfaces. Pour que l'identification des objets se fasse correctement, je dois définir, dans mes interfaces, des méthodes prenant en compte mes classes abstraites. J'impose donc aux utilisateurs de ma bibliothèque d'utiliser comme classes abstraites ASystemCore et AEvent.
Pour remédier à cela, j'ai décidé d'utiliser, les templates pour indiquer à mes interfaces les classes abtraites qui seront utilisées. Une deuxième version a donc été développée.
Le problème, c'est qu'ici, l'édition des liens ne se passe pas correctement (présence "undefined reference"). Les destructeurs (virtuel pur) de deux de mes interfaces (IEvent et ISystemCore) ne sont pas trouvés ainsi que le constructeur de ma classe System.
Voici le lien vers le code source de ces deux applications (les problèmes étant dans la deuxième). N'étant pas un expert en C++, je suis ouvert à toutes critiques sur ma conception.
Merci d'avance.
Partager