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:
- B::Road erbt von A::Road. B::Road hat dann die Member, die ich für die Konvertierung nach B brauche (hier also junctionId).
- 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?
-
- Die Klassen getrennt und unverwandt lassen, und dir ne kleine Hilfsfunktion schreiben die mit Hilfe einer A::Road eine B::Road initialisiert.
-
hustbaer schrieb:
- 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!
