#pragma once #include "glfw/glfw.hpp" #include "gui/gui.hpp" #include "layer/layer.hpp" namespace VE { class application { public: application(std::string app_name); virtual ~application() = default; private: std::unique_ptr m_glfw; std::unique_ptr m_gui; layers_stack m_layers_stack; inline static std::unique_ptr m_instance; public: void run(); static std::unique_ptr& get(); std::unique_ptr& get_glfw(); public: template void push_layer(Args*... args) { (m_layers_stack.push_back(args), ...); (args->on_attach(), ...); } private: void clear(); void attach_layers(); }; // реализация см. в проекте application& create(); }