Пытается реализовать шаблон клонирования, но застрял в порядке вызова функции:
У меня есть класс Base с вектором полиморфных классов (Script).
В базовом классе реализована функция клона, которая, по сути, делает копию себя со всеми своими членами (вектор mScripts).
Производный класс также реализует свою собственную версию функции клонирования и заботится о клонировании своих членов. Который является целым числом в данный момент.
Вопрос: Как мне вызвать функцию клона Base class 'в функции Derived class', поэтому каждый класс заботится о клонировании свои члены?
Как уродливый обходной путь, сейчас функция клонирования всех моих производных классов вручную выполняет векторное клонирование mScripts, в основном повторяя один и тот же код.
class Base
{
public:
virtual std::unqique_ptr<Base> clone()
{
std::unique_ptr<Base> clonedInstance = std::make_unique<Base>();
//clone the underlying vector
for(int i = 0; i < mScripts.size(); ++i)
{
clonedInstance->mScripts.push_back(std::move(mScripts[i]->clone()));
}
return std::move(clonedInstance);
}
std::vector<std::unique_ptr<ScriptBase>> mScripts; //polymorphic array
};
class Derived : public Base
{
public:
Derived(const int x) : Base(), mX(x)
{
}
std::unqique_ptr<Base> clone()
{
//calling base::clone() here?
return std::unique_ptr<Base> clonedInstance = std::make_unique<Derived>(mX);
}
private:
int mX;
};