Nexus schrieb:
Ein Stack ist vielleicht ungeeignet, weil man nicht unbedingt in der umgekehrten Reihenfolge wiederherstellen will, in der gesichert wurde. Oder will man das?
So wie es jetzt benutzt wird, hat man eigentlich nur den Fall, das genau ein Objekt gespeichert und wiederhergestellt wird, erst danach kommt die nächste Instanz dran. Da reicht die static-Variante. Aber mir wäre es lieber wenn das für die Zukunft nicht so eingeschränkt oder wenn doch, dann zumindest irgendwie abgesichert gegen Fehlbenutzung wäre.
Was ist mit drakons Variante? Besteht da das Problem darin, dass der Status auch polymorph ist? Dann müsstest du wahrscheinlich klonen. In Anbetracht der Tatsache, dass du aber so oder so zwei Stati speichern müsstest und (falls diese tatsächlich polymorph sind) auch zur Laufzeit dispatchen müsstest, fällt mir keine wirklich bessere Methode ein. Zumindest keine allgemeingültige... Lediglich die Unterschiede zum momentanen Status zu speichern lohnt sich nicht?
Ja, der Status selbst ist polymorph. Die Idee mit dem Abspeichern des Unterschieds finde ich gut. Es handelt sich nämlich beim Status konkret um eine ganze Reihe double-Werte, welche mittels einer fixen Anzahl anderer double-werte modifiziert werden. Dies könnte ich ganz einfach zwischenspeichern. Ich werde morgen mal nachrechnen, ob alle Operationen die da passieren in Fließkommaarithmetik sauber rückgängig gemacht werden können.
Was man sehrwahrscheinlich tun könnte, wäre die Allokationen und Deallokationen beschleunigen, indem man sich an häufig benötigten Save/Restore-Mustern orientiert.
Auch eine gute Idee, kombiniert sehr hübsch die static-Membermethode mit der dynamischen Speicherreservierungsmethode. Ich könnte vom Anwender verlangen, dass er einen Brocken Speicher mit einer Mindestgröße zur Verfügung stellt und das Objekt speichert dann seine Daten auf seine Weise da rein. Zum Wiederherstellen übergibt man dem Objekt dann den entsprechenden Pointer. Da das Objekt ja selber weiß in welcher Form es welche Daten hinterlegt hat, gibt es keine Probleme. Zudem kann der Anwender auch mehrere Speicherbereiche reservieren, wenn er mehrere Objekte gleichzeitig speichern will. Und man muss dazu den Pointer noch nicht einmal im Objekt selber speichern, sondern dies den Anwender machen lassen.
Ich glaube das ist es, wonach ich gesucht habe. Ich sehe die Vorteile aller bisherigen Lösungen vereint, ohne ihre Nachteile.