From 5b515eaf198c4ef227d4809f623efba3f4ba73cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=9C=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D0=BD=D0=BA=D0=B5=D0=B2=D0=B8=D1=87?= Date: Tue, 5 Aug 2025 19:42:36 +0700 Subject: [PATCH] =?UTF-8?q?qosd:=20=D0=B2=20=D0=BC=D0=B8=D0=BA=D1=81=D0=B8?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D0=B2=D0=B5=D1=80=D1=82=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B2=20=D1=83=D0=BC=D0=BD=D1=8B=D0=B9=20=D1=83=D0=BA=D0=B0?= =?UTF-8?q?=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В отличие от метода `getNode()`, оператор конвертации будет публичным. А ещё он позволяет преобразовывать объект неявно. --- include/ifaces/ILinkMixin.h | 1 + include/mixins/BaseLinkMixin.h | 4 ++++ include/mixins/HierarchicalLinkMixin.h | 4 ++-- include/mixins/LazyLinkMixin.h | 3 +-- 4 files changed, 8 insertions(+), 4 deletions(-) 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_;