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

44 lines
904 B
C++

#pragma once
#include "singleton_manager.h"
class singleton_initliazer;
template<class T>
class CORE_API singleton_impl {
public:
singleton_impl() {
instance_ = static_cast<T*>(this);
}
static void set(T* instance) {
instance_ = instance;
}
static T* get() {
return instance_;
}
static bool exists() {
return instance_ != nullptr;
}
protected:
static inline T* instance_ = nullptr;
};
class CORE_API singleton {
public:
virtual ~singleton() = default;
virtual void init(singleton_initliazer& initliazer) {}
virtual void post_init() {}
virtual void begin_release() {}
virtual void release() {}
virtual const char* get_name() = 0;
};
template<class T>
class CORE_API singleton_t : public singleton, public singleton_impl<T> {
public:
singleton_t() {
singleton_manager::get()->add(this);
}
};