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; return this->children;
} }
Instance Instance::CloneInternal() { std::unique_ptr<Instance> Instance::CloneInternal() {
// TODO: Implement refs // TODO: Implement refs
Instance clone = *this; std::unique_ptr<Instance> clone = this->copy();
clone.children = std::vector<std::shared_ptr<Instance>>(); clone->children = std::vector<std::shared_ptr<Instance>>();
clone.children.reserve(this->children.size()); clone->children.reserve(this->children.size());
for (std::shared_ptr<Instance> child : this->children) { 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; return clone;

View file

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