#pragma once #include #include #include namespace gencpp { namespace core { /** * @brief Base class for all components in the system. */ template class BaseComponent { public: virtual ~BaseComponent() = default; virtual void Initialize() = 0; virtual void Shutdown() = 0; virtual const std::string& GetName() const = 0; struct Config { std::string name; int priority; bool enabled; class Metadata { public: std::string author; std::string version; }; Metadata metadata; }; protected: BaseComponent(const Config& config) : m_config(config) {} Config m_config; }; } // namespace core } // namespace gencpp