#ifndef SHIP_INIT_HPP #define SHIP_INIT_HPP #ifdef __cplusplus #include #include #include #include #include struct ShipInit { static std::unordered_map>>& GetAll() { static std::unordered_map>> shipInitFuncs; return shipInitFuncs; } static void InitAll() { ShipInit::Init("*"); } static void Init(const std::string& path) { auto& shipInitFuncs = ShipInit::GetAll(); for (const auto& initFunc : shipInitFuncs[path]) { initFunc(); } } }; struct RegisterShipInitFunc { RegisterShipInitFunc(std::function initFunc, const std::set& updatePaths = {}) { auto& shipInitFuncs = ShipInit::GetAll(); shipInitFuncs["*"].push_back(initFunc); for (const auto& path : updatePaths) { shipInitFuncs[path].push_back(initFunc); } } }; #endif // __cplusplus #endif // SHIP_INIT_HPP