Das folgende Muster ist alt und gut bekannt.Polymorphes Kopieren von Objekten
class A
{
public:
virtual A* clone() const
{
return new A(*this);
}
private:
int x = 666;
};
class B : public A
{
public:
virtual B* clone() const override
{
return new B(*this);
}
private:
int y = 777;
};
Nun möchte Ich mag Objekte in einer polymorphen Weise von anderen Objekten kopieren. Ich möchte in der Lage sein:
- Erstellen von Objekten des Typs A durch von Objekten des Typs B Kopieren
- Objekte Erstellen von Typ A von Objekten vom Typ Kopieren A
- Objekte vom Typ B durch Kopieren Ein
- von Objekten des Typs Objekte vom Typ B erstellen von von Objekten des Typs B Kopieren
ich bin mir bewusst, dass der Fall 1 umfasst das Schneiden aber dies gewünscht wird. Auch ich bin mir bewusst, dass Fall 3 y
nicht kopieren, das ist auch gewünscht (ich möchte den Standard-Init-Wert verwenden).
Alle 4 Fälle sollten polymorph gemacht werden, da der Zieltyp bekannt ist, aber der tatsächliche Quellobjekttyp nicht bekannt ist.
Wie kann das obige Muster erweitert werden (oder wie würde ein alternatives Muster aussehen), das ohne RTTI möglich ist?