У меня есть такая иерархия:
class Sphere;
class Cube;
class SpherePair;
class Entity {};
class Cube : public Entity {
public:
list<Sphere*> spheres_;
};
class Sphere : public Entity {
public:
Cube *cube;
SpherePair *spherepair;
};
class SpherePair : public Entity {
public:
Sphere *first;
Sphere *second;
};
Я хочу сделать клон объекта Cube и всех объектов, связанных с ним (Sphere, SpherePair, Cube).
Куб имеет сферы внутри, каждая сфера - это половина объекта SpherePair.SpherePair указывает на сферы, которые находятся в отдельных кубах или в одном и том же кубе.
Это необходимо для правильной функциональности отмены.
Я также хотел бы иметь карту старых и клонированных сущностей:
std::map<Entity*, Entity*> old_new;
Добавлено: До этих циклических ссылок у меня была простая функция клонирования:
class Entity {
public:
virtual Entity* clone() = 0;
}
Использовалась такая схема:
std::vector<Entity*> selected_objects_;
void move(const vec3f &offset) {
document->beginUndo();
for(int i = 0; i < selected_objects_.size(); ++i) {
Entity *cloned = selected_objects_[i]->clone();
cloned->move(offset);
selected_objects_[i]->setDeleted(true);
document->pushToUndo(selected_objects_[i]);
document->addEntity(cloned);
}
document->endUndo();
}