qosd: сдавленные наброски по абстрактному дереву

This commit is contained in:
Сергей Маринкевич
2025-07-21 15:52:36 +07:00
commit 5df05f703a
20 changed files with 650 additions and 0 deletions
+39
View File
@@ -0,0 +1,39 @@
#pragma once
#include <iostream>
#include "mixins/BaseLinkMixin.h"
#include <memory>
#include "Logger.h"
/// \brief Миксин для ленивой инициализации связи (link) с дочерними элементами.
/// \tparam TLink Тип используемой связи (link).
template <class TLink>
class LazyLinkMixin : public BaseLinkMixin {
public:
void unlinkParent() override {
/* No link -- no parent, who'll unlinked? */
if (!this->link_)
throw std::logic_error("Link isn't inited!");
BaseLinkMixin::unlinkParent();
}
LinkPtr getLink() override {
lazyInit();
return this->link_;
}
LazyLinkMixin() {}
~LazyLinkMixin() override {
Logger::get("Mixin").dbg("--- Destructor called for: LazyLinkMixin");
}
protected:
void lazyInit() {
if (!link_) {
link_ = std::make_shared<TLink>(
BaseLinkMixin::getNode());
}
}
LinkPtr link_;
};