E
Hi,
die Funktionszeiger hatte ich in jedem einzelnen Node. Das Design war aber echt zu kompliziert. Im Endeffekt waren die Funktionszeiger das ganze Problem am Design, die haben die Strukturen starr gemacht, den Code kompliziert und lang... nicht gut.
Mein neues Design hat jetzt einen kopierbaren Baum. Für das Problem, dass eine Menge nichts hinzugefügt haben darf, was in der Obermenge nicht enthalten ist, habe ich jetzt einfach eine zweite Klases genutzt, die von Menge ableitet: SetInTree. SetInTree kennt den Node, in dem es steckt, und kann darüber eben auch auf andere Nodes zugreifen, um dort zu ermitteln, wie viele Elemente jetzt z.B. in der Obermenge stecken.
So weit, so gut. Das Einzige, was mich gerade noch stört, ist, dass SetInTree und SetNode koabhängig sind.
Für Serialisierung und Memento ist das aber praktisch: Ich kann den Tree jetzt einfach (recht schnell und mit kurzem Code!) kopieren. XML/binäre Serialisierung ist wie vorher Extraaufwand, aber der lässt sich eben nicht reduzieren, evtl. mit boost::serialize ein bisschen.
Undo/redo, Serialisierung, Baumstrukturen sind Standardthemen. Damit ist auch jede Kombination davon miteinander für mich ein Standardthema. Vielleicht schreibe ich mal einen Artikel dazu, in dem klar wird, wie man das alles verbindet und sei es nur als Erinnerung für mich selbst.