#pragma once #include #include #include "ifaces/ILinkMixin.h" class BaseLinkMixin : public virtual ILinkMixin, public std::enable_shared_from_this { public: void linkChild(const MixinPtr& child) override { LinkPtr childLink = child->getLink(); childLink->setParent(getNode()); getLink()->addChild(child); } void unlinkParent() override { LinkPtr link = getLink(); MixinPtr parent = link->getParent(); if (!parent) throw std::logic_error("Have no parent!"); LinkPtr parentLink = parent->getLink(); parentLink->removeChild(getNode()); getLink()->setParent(nullptr); } ~BaseLinkMixin() override { std::cout << "--- Destructor called for: " << "BaseLinkMixin" << "\n"; } protected: MixinPtr getNode() { return shared_from_this(); } };