User Daten oder Vererbung?



  • Guten Tag!

    Ich habe folgendes Problem:
    Ich parse ein Dateiformat A und fülle diverse A-spezifische Klassen beim parsen einer A-Datei.
    Beispiel:

    namespace A {
    
    struct Road {
       int id;
       double length;
       ...
    };
    
    }
    

    Nun will ich Road nach Dateiformat B konvertieren und B hat Kreuzungen (ein Konzept, das Dateiformat A nicht kennt, drum hat Road keinerlei Kreuzungsmember).
    Ich bräuchte jetzt also eigentlich sowas:

    namespace B {
    
    struct Road {
       int id;
       double length;
       int junctionId;
       ...
    };
    
    }
    

    Um das zu realisieren hätte ich nun 2 Ideen:

    1. B::Road erbt von A::Road. B::Road hat dann die Member, die ich für die Konvertierung nach B brauche (hier also junctionId).
    2. In A::Road bereits UserData einbauen (boost::any oder UserData*). Ich könnte dann im Namespace B eine kleine struct anlegen, die junctionId enthält und jede Instanz von A::Road zeigt dann auf diese UserData.

    Was findet ihr besser? Oder gibts noch andere Ansätze?



    1. Die Klassen getrennt und unverwandt lassen, und dir ne kleine Hilfsfunktion schreiben die mit Hilfe einer A::Road eine B::Road initialisiert.


  • hustbaer schrieb:

    1. Die Klassen getrennt und unverwandt lassen, und dir ne kleine Hilfsfunktion schreiben die mit Hilfe einer A::Road eine B::Road initialisiert.

    Aber warum sollte ich nicht von A::Road erben, wenn doch B::Road nur ein paar Member zu A::Road hinzufügt?



  • Was soll das mit den namespaces?
    Das sieht so aus, als ob A::Road nix mit B::Road zu tun hat.
    Warum überhaupt 2 Klassen?
    Ist A::Road nicht einfach B::Road mit 0 Kreuzungen?



  • namespace B {
    
    struct Road {
    	A::Road a_part;
    	int junctionId;
       ...
    };
    
    }
    

    Zu offensichtlich?



  • Jockelx schrieb:

    Was soll das mit den namespaces?
    Das sieht so aus, als ob A::Road nix mit B::Road zu tun hat.
    Warum überhaupt 2 Klassen?
    Ist A::Road nicht einfach B::Road mit 0 Kreuzungen?

    A::Road kennt das Konzept von Kreuzungen nicht mal. Ausserdem sind die Kreuzungen nur ein Beispiel. Es gibt noch mehr Unterschiede.

    @TyRoXx: Das sieht echt am besten aus. Danke! 🙂 👍


Anmelden zum Antworten