diff --git a/include/ifaces/ILinkMixin.h b/include/ifaces/ILinkMixin.h index db07e52..9ae7fc4 100644 --- a/include/ifaces/ILinkMixin.h +++ b/include/ifaces/ILinkMixin.h @@ -11,6 +11,7 @@ public: using ElemPtr = std::shared_ptr; virtual ~ILinkMixin() = default; + virtual operator std::shared_ptr() = 0; virtual void linkChild(const ElemPtr& child) = 0; virtual void unlinkParent() = 0; virtual const std::vector& children() = 0; diff --git a/include/mixins/BaseLinkMixin.h b/include/mixins/BaseLinkMixin.h index 0862ee3..5501a71 100644 --- a/include/mixins/BaseLinkMixin.h +++ b/include/mixins/BaseLinkMixin.h @@ -17,6 +17,10 @@ public: Logger::get("ConDes").dbg("--- Destructor called for: BaseLinkMixin"); } + operator std::shared_ptr() override { + return this->getNode(); + } + void linkChild(const ElemPtr& child) override { getLink()->addChild(child); diff --git a/include/mixins/HierarchicalLinkMixin.h b/include/mixins/HierarchicalLinkMixin.h index 38285b5..e2b3c9a 100644 --- a/include/mixins/HierarchicalLinkMixin.h +++ b/include/mixins/HierarchicalLinkMixin.h @@ -34,10 +34,10 @@ protected: if (typeid(*child) == typeid(*this)) { Logger::get("Mixin").dbg("--- Mutate to OneToMany"); - newLink = std::make_shared>(this->getNode()); + newLink = std::make_shared>(*this); } else { Logger::get("Mixin").dbg("--- Mutate to OneToOne"); - newLink = std::make_shared>(this->getNode()); + newLink = std::make_shared>(*this); } if (newLink && this->link_) diff --git a/include/mixins/LazyLinkMixin.h b/include/mixins/LazyLinkMixin.h index 7d8423a..e58e3da 100644 --- a/include/mixins/LazyLinkMixin.h +++ b/include/mixins/LazyLinkMixin.h @@ -31,8 +31,7 @@ public: protected: void lazyInit() { if (!link_) { - link_ = std::make_shared( - BaseLinkMixin::getNode()); + link_ = std::make_shared(*this); } } LinkPtr link_;