qosd: сдавленные наброски по абстрактному дереву
This commit is contained in:
@@ -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_;
|
||||
};
|
||||
Reference in New Issue
Block a user