Direkte Frage : Wie kann ich bei drei (oder mehr) nahezu identischen Kopien eines Klassenobjekts die Unterschiede zwischen ihnen am besten (oder effizientesten) speichern?
Hintergrund: Ich habe einen Algorithmus, der eine Reihe von Parametern erfordert:
struct params
{
std::string A;
std::string B;
double C;
double D;
userDefinedTypeDef S;
};
Und ich möchte meinen Algorithmus dreimal aufrufen. Das erste Mal: C = 3 & S = 'foo'. Das zweite Mal: C = 4 & S = 'foo'. Und das dritte Mal: C = 4 & S = 'bar'. Das angegebene Beispiel dient nur der Veranschaulichung, das echte Objekt ist eine Klasse, keine Struktur, und hat einige hundert Mitglieder. Außerdem möchte ich den Algorithmus viel öfter als dreimal aufrufen, ich möchte also keine zusätzlichen Kopien dieses Objekts im Umlauf haben. Was ist also das beste Muster / die beste Implementierung / Methode, um nur den Unterschied zwischen zwei Klassenobjekten zu speichern?
Mit anderen Worten, wie kann ich speichern: "Objekt 2 ist dasselbe wie &(Objekt 1), außer dass C = 4"?
Editar : Wie in den Kommentaren unten erwähnt, möchte ich wirklich vermeiden, den Funktionsaufruf sowie die Arrays entweder des Parameterklassenobjekts oder der Mitgliedsobjekte zu ändern. Mein Ziel dabei ist es, eine Kopie zu behalten, ala "currentParam" und dann eine Liste der Unterschiede zwischen aufeinanderfolgenden Aufrufen. Auf diese Weise kann ich einfach die Werte aktualisieren, die sich geändert haben, während alles andere unverändert bleibt, und die Funktion verwenden, die ich erhalten habe.
Wie lässt sich das am einfachsten bewerkstelligen? Eine Klasse mit booleschen Flags 'member1_changed' erstellen? Und dann eine Union verwenden? Ich bin ziemlich stecken - ein bisschen über Sparse-Matrix-Speicher rätseln und wie, die verwandt sein könnte - daher, warum ich die Frage gestellt.