31 while (!singletons_.empty())
35 [[nodiscard]]
bool Empty()
const {
36 return singletons_.empty();
40 std::stack<std::unique_ptr<BaseSingleton>> singletons_;
49 template<
typename T2 = T>
50 requires std::derived_from<T2, T>
53 if constexpr (std::is_default_constructible_v<T2>) {
55 instance_ = (T*)
Store(std::make_unique<T2>());
57 throw std::logic_error(
"Singleton is not default-constructible but was not explicitly initialized before access.");
60 return *(T2*) instance_;
63 template<
typename T2 = T,
typename... Args>
64 requires std::derived_from<T2, T>
65 static T2&
init(Args&&... args) {
67 instance_ = (T*)
Store(std::make_unique<T2>(std::forward<Args>(args)...));
68 return *(T2*) instance_;
72 requires std::derived_from<T2, T>
73 static void f(std::function<
void(T2&)> action) {
75 action(*(T2*) instance_);
78 static void f(std::function<
void(T&)> action) {
94 inline static bool init_ =
false;
95 inline static T* instance_ =
nullptr;
Definition Singleton.h:17
virtual ~BaseSingleton()=default
static void Clear(BaseSingleton *ptr)
Definition Singleton.cpp:10
static BaseSingleton * Store(std::unique_ptr< BaseSingleton > &&ptr)
Definition Singleton.cpp:5
Definition Singleton.h:26
void Shutdown()
Definition Singleton.h:30
SingletonManager()=default
bool Empty() const
Definition Singleton.h:35
Definition Singleton.h:47
static void f(std::function< void(T2 &)> action)
Definition Singleton.h:73
static void reset()
Definition Singleton.h:83
static T2 & init(Args &&... args)
Definition Singleton.h:65
static void f(std::function< void(T &)> action)
Definition Singleton.h:78
static T2 & instance()
Definition Singleton.h:51
~Singleton() override
Definition Singleton.h:88
Definition ArcdpsExtension.h:10
SingletonManager g_singletonManagerInstance
Definition Singleton.cpp:3