44 template <
typename CT,
typename... Args>
45 static CT *create(Args... args) {
47 CT *_v =
new CT(args...);
52 return static_cast<CT *
>(i_->value);
56 template <
typename... Args>
57 static T *create(Args... args) {
58 return create<T>(args...);
60 static void set(T *p) { i_->value = p; }
61 static T *get() {
return i_->value; }
63 Instance(
const std::string &_name = {}) : value(
nullptr) {
65 list.append(i_ =
this);
67 virtual ~Instance()
override {
68 Instance<T>::destroyValue();
73 Instance(
const Instance &) =
delete;
74 void destroyValue()
override {
75 if (value)
delete value;
77 virtual void created() {}
81 inline static Instance<T> *i_;