000
25.07.2004, 12:32 Uhr
XCoder
|
Also zunächst einmal die Idee:
Ich habe mir überlegt, zukünftig all meine Anwendungen auf Pluginbasis zu erstellen, um flexibler auf Probleme reagieren zu können. Es sind dabei Plugins vorgesehen, die für die gängsten Programmiermuster lösungen erstellen können (Fenstererstellung, Renderer, Netzwerkplugin, Soundausgabe, usw.).
Weiterhin soll der Anwender nur eine Schnittstelle kennen, mehr nicht. In dem Fall habe ich die Klasse XComBase genannt, die einige rein virtuelle Methoden definiert, die dann alle Plugins überschreiben sollen. Das dient z.B. der Kommunikation zwischen den Plugins, die über das command design pattern realisiert werden soll. Weiterhin hat die Klasse noch Methoden wie GetPluginInstance () oder GetPluginTyp (), die auch von den Plugins überschrieben werden müssen und mit dessen Hilfe die Plugins gemanaged werden können. Von dieser XComBase Klasse ist jetzt jeweils für jede Pluginart wieder eine Klasse abgeleitet, die wiederum rein virtuelle Methoden definiert, die allerding nur von den Plugins überschrieben werden, die von dieser Klasse abgeleitet werden (und somit zu dieser Pluginart gehört).
Die Anwendung macht jetzt folgendes: Sie erzeugt einen XComBase pointer und eine Managerinstanz. Dann wird die Methode registerPlugin () vom Manager aufgerufen, die dann einen Flag erwartet, welcher bestimmt welches Plugin erstellt werden soll, sowie den gerade erzeugten Pointer. Der Manager ruft in der Dll die methode auf, die den pointer initalisiert und die Anwendung kann ab sofort damit arbeiten.
Allerdings kennt die Anwendung die Klasse nicht und arbeitet mit einem XComBase*, welcher nicht die aufzurufenden Methoden kennt (da sie in XComBase nicht definiert sind sondern z.B. in XComGuiBase). Ein Cast kommt da auch nicht in Frage, weil da fakto für einen Cast die Zielklasse bekannt sein muss. Was mache ich denn da?
Gruß Sebastian |