Aufgespaltene Klassenhierarchien

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Aufgespaltene Klassenhierarchien

Beitrag von Xin » So Aug 19, 2012 12:55 pm

Ich stolpere in diesem Jahr immer wieder über ein Problem, nämlich, dass ich Objekten, die von einer gemeinsamen Basisklasse abgeleitet sind, nachträglich ein Basisklassenerweiterung verkaufen muss.

Aktuell habe ich eine Klasse "Result". Ein Result kann ein IntResult, BoolResult oder ein StringResult sein.
Das bedeutet, dass die abgeleiteten Klassen alle eine unterschiedliche Größe haben.

Nun muss ich ein Result mit einem Namen verknüfen und dieser Name muss in der Oberklasse auftauchen, damit ich dieses NamedResult in Container packen kann.
Ich könnte nun eine Klasse definieren, die auf ein Result referenziert, dann spielt es keine Rolle, um welchen Result-Typ es sich handelt. Ich möchte aber nicht zwei Objekte anlegen müssen, nur um das auszudrücken.

Ich könnte alle Ableitung nochmal machen und von einem NamedResult ableiten, das würde per Template gehen, erzeugt aber eine Menge Boilerplate.

Bin für Ideen offen. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Aufgespaltene Klassenhierarchien

Beitrag von fat-lobyte » So Aug 19, 2012 7:56 pm

Wäre vielleicht "Type Erasure" etwas für dich? http://aszt.inf.elte.hu/~gsd/s/cikkek/abel/Becker.pdf
http://www.cplusplus.com/forum/articles/18756/

Oder bereits fertig implementiert Boost.Any?: http://www.boost.org/doc/libs/1_50_0/doc/html/any.html
(benutzt Type Erasure)
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Aufgespaltene Klassenhierarchien

Beitrag von Xin » Mo Aug 20, 2012 10:27 pm

Ich habe eine Klasse NamedResult geschrieben, die die Operatoren -> und * pure virtuell bereitstellt indem es ein Result zurückliefert und einen konstanten Namen trägt.

Davon abgeleitet ist ein Template NamedResultTpl, dass von von NamedResult erbt und ein Member hat. Dieses Member wird bei -> und * zurückgegeben. Entsprechend muss es ein von Result abgeleiteter Typ sein.
Result selbst legt fest, was für ein Typ es ist.
Auch BoilerPlate, aber halbwegs überschaubar.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten