Ich möchte eine tiefe Kopie eines Vektors mit Zeigern auf Objekte haben, aber das Objekt kann entweder C oder B sein. Ich weiß, verwirrend (die Art, wie ich es erkläre), lassen Sie mich illustrieren.
class A {
A(const A& copyme) { }
void UnableToInstantiateMeBecauseOf() =0;
};
class B {
B(const B& copyme) : A(copyme) {}
};
class C {
C(const C& copyme) : A(copyme) {}
};
std::vector<A*>* CreateDeepCopy(std::vector<A*>& list)
{
std::vector<A*>* outList = new std::vector<A*>();
for (std::vector<A*>::iterator it = list.begin(); it != list.end(); ++it)
{
A* current = *it;
// I want an copy of A, but it really is either an B or an C
A* copy = magic with current;
outList->push_back(copy);
}
return outList;
}
Wie erstellt man eine Kopie eines Objekts, von dem man nicht weiß, welcher vererbte Typ es ist?