Designfrage für Datenstruktur



  • Hallo,

    ich habe hier eine Datenstruktur und frage mich, ob es eine bessere Möglichkeit gibt, das Interface zu definieren. Es handelt sich dabei um eine Baum-Datenstruktur, die sogenannte Cluster speichert.

    genauer:

    template<typename UserDefinedData>
    class Cluster
    {
      // ... Implementierung der Cluster
    };
    

    Als template-parameter kann ich eine eigene Klasse angeben, in der ich dann für jedes Cluster noch Daten für meine Applikation ablegen kann.

    Weiter werden während der Benutzung des Baums bestimmte Ereignisse ausgelöst, auf diese kann ich in einem Prozessor reagieren, in etwa so:

    template<typename Cluster>
    class Processor
    {
    public:
      void processCreate(Cluster * c);
      void processJoin(Cluster * c);
      // etc.
    };
    

    Die Funktionen, die ich dort implementiere werden dann vom Baum jeweils aufgerufen, wenn das entsprechende Ereignis auftritt.

    Zuguterletzt gibt es noch den Baum selbst, dem ich natürlich den Clustertyp sowie den Prozessortyp übergebe. Insgesamt sieht die Benutzung dann in etwa so aus:

    typedef Cluster<MyData> MyCluster;
    typedef Processor<MyCluster> MyProcessor;
    typedef Tree<MyProcessor, MyCluster> MyTree;
    

    An sich gefällt mir das ganz gut, weil es sehr flexibel ist. Aber eine Sache stört mich: manchmal würde ich in den BenutzerDaten MyData gerne einen Pointer auf ein Cluster speichern... das macht aber gewisse Probleme:
    Ich würde gerne einen Pointer auf Cluster<MyData> in MyData speichern... Zur zeit verwende ich dafür einen void*, aber schöner wäre es doch das ganze typsicher machen zu können.

    Irgendwelche Ideen/Vorschläge, wie man das ändern könnte ohne die Flexibilität zu verlieren?



  • Jester schrieb:

    das macht aber gewisse Probleme:
    Ich würde gerne einen Pointer auf Cluster<MyData> in MyData speichern... Zur zeit verwende ich dafür einen void*, aber schöner wäre es doch das ganze typsicher machen zu können.

    Was für Probleme hast du denn da konkret? 😕



  • David_pb schrieb:

    Jester schrieb:

    das macht aber gewisse Probleme:
    Ich würde gerne einen Pointer auf Cluster<MyData> in MyData speichern... Zur zeit verwende ich dafür einen void*, aber schöner wäre es doch das ganze typsicher machen zu können.

    Was für Probleme hast du denn da konkret? 😕

    Jo, hast recht mit ein bißchen umstellen lässt es sich doch lösen... gab nur noch ein paar Probleme mit dem Teil des Codes den ich hier unterschlagen hatte. 😉


Anmelden zum Antworten