Files
AronaCore/core/misc/singleton/singleton_manager.h

40 lines
725 B
C++

#pragma once
class singleton;
class singleton_initliazer {
public:
bool has_init(singleton* s);
void init_singleton(singleton* s);
template<class T>
T* require() {
auto instance = T::get();
if (has_init(instance)) {
return instance;
}
singletons_.push_back(instance);
instance->init(*this);
return instance;
}
std::vector<singleton*> singletons_{};
};
class CORE_API singleton_manager {
public:
static singleton_manager* get() {
static singleton_manager instance;
return &instance;
}
void add(singleton* s);
void init();
void release() const;
private:
std::vector<singleton*> singletons_;
};