alle klassen, die von einer klasse abgeleitet sind, bekommen



  • @Shade: du hast die Standard-Frage vergessen: Was willst du eigentlich tun, vielleicht kennen wir eine Alternative?™



  • Diese Frage darf er nicht mehr stellen, seit ich mir vor Gericht das Copyright dafür erstritten habe.



  • das muss doch irgendwie gehen...

    folgendes: ich habe eine klasse soundGenerator, von der alle sound/synth-plugins ableiten müssen. nun will ich z.b. beim starten des programms sozusagen alle plugins initialisieren bzw. deren namen erfahren, so dass ich wenigstens einen vector<string> habe, der die namen aller plugins enthält...

    momentan habe ich eine lösung, die aber äußerst inflexibel ist. eine extra cpp-file included die header aller synth-plugins und fragt dann explizit bei jedem plugin über die statische methode get_plugin_name() den namen ab und steckt die in den vector. das problem ist halt, dass das ganze sehr statisch ist und nur über das hinzufügen einer abfrage in der cpp-file bei einem neuen synth neue plugins eingebaut werden, ich will aber ohne änderung dieser cpp-file dynamisch plugins einbinden oder auch rausnehmen, in dem ich ein entsprechendes plugin dazulinke...



  • Hm, wieso nicht eine Virtuelle Methode GetName() für deine Basisklasse,
    die du dann beim Ableiten überschreibst. Dann brauchst du nur noch irgendwo
    einen Container mit Basisklassenzeiger, der dann die jeweiligen Zeiger auf
    die Plugins enthält...

    Devil



  • devil81 schrieb:

    Hm, wieso nicht eine Virtuelle Methode GetName() für deine Basisklasse,
    die du dann beim Ableiten überschreibst.

    das habe ich bereits, die basisklasse hat eine rein virtuelle methode "getPluginName"...

    devil81 schrieb:

    Dann brauchst du nur noch irgendwo
    einen Container mit Basisklassenzeiger, der dann die jeweiligen Zeiger auf
    die Plugins enthält...

    das mit dem container ist schon klar. mein problem ist, woher bekomme ich die zeiger auf die plugins??



  • Woher lädst du deine Plugins ?
    Du bräuchtest eine Klasse die dir die Plugins verwaltet,
    diese könnte eine Funktion LoadPlugin(...) haben, welches
    dann die Schnittstelle für das Laden ist, und dort bekommst du dann
    auch den Zeiger.

    Devil



  • die plugins werden einfach beim linken des programms mit reingelinkt... da bekomm ich beim programm start nicht plugins bzw. weiß das programm erstmal gar nicht, welche plugins mit drinne sind...es geht hier ja wirklich drum, dass ich die klassennamen habe, damit ich mit new instanzen anlegen kann...

    später will ich vielleicht auch mal mit dlopen, dlctl usw. arbeiten, so dass ich dann dynamisch libs einbinden kann



  • globale Objekte die sich im Ctor in einer Liste eintragen



  • meinst du z.b. einen statischen vector?? ginge, aber mein prob ist, dass die plugins ja nicht am anfang instanziert werden, außerdem nützt mir ein eintrag im ctor nichts, da ich ja nicht weiß, welche plugins es alles gibt und somit kann ich keine instanten davon erzeugen... im prinzip müsste ich einfach ein programm schreiben, dass mir meinen include-ordner durchsucht und guckt, welche klassen von soundGenerator abgeleitet sind und dann eine entsprechende tabelle schreibt, auf die das programm zu greift, also sowas wie MOC bei qt....



  • Wie wärs wenn sich die Instanzen der ChildKlassen im Konstruktor bei der
    Basisklasse 'anmelden' bzw. ihr einen pointer auf sich übergeben ?

    Devil



  • Er will das ja eben machen, bevor die Plugin-Instanzen erstellt werden bzw. die Plugins überhaupt erst durch die erstellte Liste finden und selbst erstellen.

    Ich werde gleich mal was probieren und dann posten...
    Edit: OK, wenn es irgendwelche komfortablen template-Tricks gibt, sind sie mir gerade zu hoch. Aber Shades Lösung (s.u.) ist ja immerhin schon besser, als die ganzen Klassen zentralisiert eintragen zu müssen.



  • todo schrieb:

    meinst du z.b. einen statischen vector?? ginge, aber mein prob ist, dass die plugins ja nicht am anfang instanziert werden, außerdem nützt mir ein eintrag im ctor nichts, da ich ja nicht weiß, welche plugins es alles gibt und somit kann ich keine instanten davon erzeugen...

    Deshalb ja die globalen Objekte. Jedes Plugin registriert sich halt irgendwo - und zwar indem es ein globales Objekt anlegt, dass im Ctor die Eintragung vornimmt.

    Sofern du die Plugins statisch linkst, ist das OK.

    Wenn du sie allerdings dynamisch linkst, verstehe ich das Problem nicht. Da du dann ja selber weisst, was du alles geladen hast...


Anmelden zum Antworten