hmm..
So ein richtiger Knaller fällt mir auch nicht ein, aber
Spinoza hat geschrieben:..eine immanente aber komplexe Eigenschaft von B, die zur Übersichtlichkeit in eine eigene Klasse A ausgelagert wurde..
klingt für mich z.B. nach
Code: Alles auswählen
class B {
enum EnumType {etOne, etTwo};
class A {
void func(EnumType x);
};
private:
A aInstance;
};
Sollte "A" allerdings im public-Interface von "B" benötigt werden, so wird das vermutlich recht schnell unübersichtlich.. eine get-Methode für "aInstance" sähe ja nicht wirklich schick aus:
Aber zu den beiden Varianten "Pointer-mit-Forward-Decl" und "Enum-Auslagern": Beide klingen für mich ebenfalls nach einer akzeptablen Lösung. Ehrlich gesagt, wäre mein erster Gedanke beim Anblick der Zeile "aInstance->doXy()" von einem Teamkollegen wahrscheinlich eher nicht "Mein Gott.. da hat er doch tatsächlich eine immanente aber komplexe Eigenschaft von B
ALS POINTER deklariert!!".
Ich würde vermutlich eher denken: "hat er an den "Deep-Copy" gedacht..?". Auch kann ich nicht erkennen, warum du dann "alles bis auf primitive Datentypen als Zeiger führen" oder "sämtliche Enum des Projektes" auslagern müsstest. Das wären ja nicht "alle" enums, sondern nur die
gemeinsamen enums von A und B.
Falls du keine perfekte Lösung findest: bleib in C++ pragmatisch.. Für Philosophen gibt es andere Programmiersprachen
