Я искал вокруг и, кажется, для того, чтобы выполнить это, мне нужно изменить свой базовый класс и узнать, подходит ли это лучший подход. Например, У меня есть базовый класс:
class Base {}
Затем длинная строка производных классов:
class Derived_1:: public Base {}
class Derived_2:: public Derived_1{}
...
...
class Derived_n:: public Derived_M{}
И у меня есть еще один класс:
class DeepCopy
{
Base * basePtr;
public:
DeepCopy(DeepCopy & dc) {}
}
Предполагая, что конструкторы копирования класса Base и Derived_x правильно закодированы, как лучше всего написать конструктор копирования для DeepCopy. Как мы можем узнать о классе, который находится в basePtr объекта, который мы собираемся скопировать?
Единственный способ, которым я могу думать, - использовать RTTI, но использование длинного списка dynamic_casts кажется неправильным. Кроме того, DeepCopy требует знать иерархию наследования базового класса.
Другой метод, который я видел, здесь. Но для этого требуется, чтобы классы Base и Derived реализовали метод clone.
Итак, есть гораздо более простой, стандартный способ сделать это?