У меня есть граф сцены, все узлы происходят из базового класса AbstractNode
, AbstractNode
имеет registerChild
функция-член:
registerChild<T>(string name, shared_ptr<AbstractNode> * childMember)
используется для регистрации детей стандартным способом (чтобы их можно было перечислить и изменить в интерфейсе базового класса). Это в основном добавляет пару name / child_pointer к хешу.
Так, например, материал класса будет объявлен так (сокращенно):
class Material : public AbstractNode
{
public:
Material() { registerChild(&color); }
private:
std_shared<Color> color;
}
Цвет является еще одним подклассом AbstractNode.
Теперь я хотел бы реализовать конструктор копирования для AbstractNode. Он должен скопировать список зарегистрированных детей и обновить указатели дочерних элементов. Я хотел бы избежать переопределения конструктора копирования во всех базовых классах. Это возможно?
Я думал о работе над смещением указателя, между this
и ребенок указывает. Но гарантированно ли они постоянны между двумя экземплярами? Это кажется мне большим взломом … (И я даже уверен, что это не гарантируется при создании подклассов)
Спасибо,
Etienne
Задача ещё не решена.
Других решений пока нет …