40 lines
725 B
C++
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_;
|
|
};
|