Szukałem i wydaje mi się, że muszę to zrobić. Muszę zmienić swoją klasę bazową i chcę wiedzieć, czy to najlepsze podejście. Na przykład Mam klasy Base:C++: Głębokie kopiowanie wskaźnika klasy podstawowej
class Base {}
Potem długa kolejka klas pochodnych:
class Derived_1:: public Base {}
class Derived_2:: public Derived_1{}
...
...
class Derived_n:: public Derived_M{}
A potem mam inną klasę:
class DeepCopy
{
Base * basePtr;
public:
DeepCopy(DeepCopy & dc) {}
}
Zakładając Bazę konstrukcje klasy class i Derived_x są poprawnie zakodowane, jaki jest najlepszy sposób napisania konstruktora kopiowania dla DeepCopy. Skąd mamy wiedzieć o klasie, która znajduje się w basePtr obiektu, który będziemy kopiować?
Jedyny sposób, jaki mogę wymyślić, to korzystanie z RTTI, ale używanie długiej listy dynamic_casts wydaje się nie w porządku. Poza tym wymaga DeepCopy, aby wiedzieć o hierarchii dziedziczenia klasy Base.
Inną metodą, którą zobaczyłem jest here. Ale wymaga to klas bazowych i pochodnych implementacji metody klonowania.
Czy istnieje o wiele łatwiejszy, standardowy sposób robienia tego?
Jeśli uzywasz typu POD danych, powiedziałbym 'memcpy', ale ponieważ nie są, może używać szablonów. –