#pragma once // size_t #include class Node { public: virtual ~Node() noexcept = default; virtual void init() noexcept = 0; virtual void update(unsigned long deltaMillis); }; class NodeList { public: virtual ~NodeList() noexcept = default; virtual size_t size() const noexcept = 0; virtual Node* get(size_t index) noexcept { return nullptr; } virtual Node const* get(size_t index) const noexcept { return const_cast(this)->get(index); } }; class AbstractNode : public Node { public: void init() noexcept override; void update(unsigned long deltaMillis) noexcept override; protected: virtual NodeList& getChildren() noexcept = 0; };