8#include <unordered_map>
14 template <
typename T,
typename... Args>
16 auto service = std::make_unique<T>(std::forward<Args>(args)...);
18 services_[std::type_index(
typeid(T))] = std::move(service);
29 const auto it = services_.find(std::type_index(
typeid(T)));
30 if (it == services_.end()) {
31 throw std::runtime_error(
32 std::format(
"Service not found: {}",
typeid(T).name()));
36 return std::ref(*
static_cast<T*
>(it->second.get()));
43 const auto it = services_.find(std::type_index(
typeid(T)));
44 if (it == services_.end()) {
48 return std::ref(*
static_cast<T*
>(it->second.get()));
52 std::unordered_map<std::type_index, std::unique_ptr<IEngineService>>
Definition serviceContainer.h:10
std::reference_wrapper< T > get_service() const
Definition serviceContainer.h:27
T & register_service(Args &&... args)
Definition serviceContainer.h:15
void unregister_service()
Definition serviceContainer.h:24
std::optional< std::reference_wrapper< T > > try_get_service() const
Definition serviceContainer.h:41
Definition iEngineService.h:10