This might could work??

This commit is contained in:
maelstrom 2024-10-01 22:59:47 +02:00
parent ddd89a2b6d
commit 3df83a13b4
2 changed files with 9 additions and 6 deletions

View file

@ -31,15 +31,15 @@ std::vector<std::shared_ptr<Instance>> Instance::GetChildren() {
return this->children;
}
Instance Instance::CloneInternal() {
std::unique_ptr<Instance> Instance::CloneInternal() {
// TODO: Implement refs
Instance clone = *this;
clone.children = std::vector<std::shared_ptr<Instance>>();
clone.children.reserve(this->children.size());
std::unique_ptr<Instance> clone = this->copy();
clone->children = std::vector<std::shared_ptr<Instance>>();
clone->children.reserve(this->children.size());
for (std::shared_ptr<Instance> child : this->children) {
clone.children.push_back(std::make_shared<Instance>(child->CloneInternal()));
clone->children.push_back(std::make_shared<Instance>(child->CloneInternal()));
}
return clone;

View file

@ -4,6 +4,8 @@
#include <string>
#include <vector>
#define INSTANCE_COPY_IMPL(CLASS_NAME) std::unique_ptr<Instance> CLASS_NAME::copy() { return std::make_unique<CLASS_NAME>(CLASS_NAME(*this)); }
// The base class for all objects in the data model
class Instance : std::enable_shared_from_this<Instance> {
private:
@ -16,5 +18,6 @@ public:
std::vector<std::shared_ptr<Instance>> GetChildren();
virtual void Init();
Instance CloneInternal();
std::unique_ptr<Instance> CloneInternal();
virtual std::unique_ptr<Instance> copy() const = 0;
};