32 while (!singletons_.empty())
36 [[nodiscard]]
bool Empty()
const {
37 return singletons_.empty();
41 std::stack<std::unique_ptr<BaseSingleton>> singletons_;
50 template<
typename T2 = T>
51 requires std::derived_from<T2, T>
54 if constexpr (std::is_default_constructible_v<T2>) {
56 instance_ = (T*)
Store(std::make_unique<T2>());
58 throw std::logic_error(
"Singleton is not default-constructible but was not explicitly initialized before access.");
61 return *(T2*) instance_;
64 template<
typename T2 = T,
typename... Args>
65 requires std::derived_from<T2, T>
66 static T2&
init(Args&&... args) {
68 instance_ = (T*)
Store(std::make_unique<T2>(std::forward<Args>(args)...));
69 return *(T2*) instance_;
73 requires std::derived_from<T2, T>
74 static void f(std::function<
void(T2&)> action) {
76 action(*(T2*) instance_);
79 static void f(std::function<
void(T&)> action) {
95 inline static bool init_ =
false;
96 inline static T* instance_ =
nullptr;
Definition Singleton.h:18
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:27
void Shutdown()
Definition Singleton.h:31
SingletonManager()=default
bool Empty() const
Definition Singleton.h:36
Definition Singleton.h:48
static void f(std::function< void(T2 &)> action)
Definition Singleton.h:74
static void reset()
Definition Singleton.h:84
static T2 & init(Args &&... args)
Definition Singleton.h:66
static void f(std::function< void(T &)> action)
Definition Singleton.h:79
static T2 & instance()
Definition Singleton.h:52
~Singleton() override
Definition Singleton.h:89
Definition ArcdpsExtension.h:10
SingletonManager g_singletonManagerInstance
Definition Singleton.cpp:3