Files
m2dev-client-src/src/UserInterface/AbstractSingleton.h
2025-08-19 03:54:44 +02:00

29 lines
544 B
C++

#pragma once
template <typename T>
class TAbstractSingleton
{
static T * ms_singleton;
public:
TAbstractSingleton()
{
assert(!ms_singleton);
intptr_t offset = (intptr_t) (T*) 1 - (intptr_t) (CSingleton <T>*) (T*) 1;
ms_singleton = (T*) ((intptr_t) this + offset);
}
virtual ~TAbstractSingleton()
{
assert(ms_singleton);
ms_singleton = 0;
}
__forceinline static T & GetSingleton()
{
assert(ms_singleton!=NULL);
return (*ms_singleton);
}
};
template <typename T> T * TAbstractSingleton <T>::ms_singleton = 0;