OROCHI
 
Loading...
Searching...
No Matches
GxSingleton.h
1//===========================================================================
9//===========================================================================
10#pragma once
11
12GX_CORE_NAMESPACE_BEGIN()
13
14//===========================================================================
16//===========================================================================
17template <typename T>
19{
20 //-------------------------------------------------------------
22 //-------------------------------------------------------------
24public:
27 {
28 GX_ASSERT(_pInstance == nullptr, "already exist");
29 size_t offset = (size_t)(T*)1 - (size_t)(SingletonBase<T>*)(T*)1;
30 _pInstance = (T*)((size_t)this + offset);
31 }
32
35 {
36 GX_ASSERT(_pInstance != nullptr, "already deleted");
37 _pInstance = nullptr;
38 }
39
40private:
41 // コピーコンストラクタ(使用禁止)
42 SingletonBase(const SingletonBase& singletonBase);
43 // 代入演算子(使用禁止)
44 const SingletonBase& operator = (const SingletonBase& singletonBase);
45
47 //-------------------------------------------------------------
49 //-------------------------------------------------------------
51public:
53 GX_FORCE_INLINE static T& getSingleton(void)
54 {
55 GX_ASSERT(_pInstance, "has not initialized");
56 return *_pInstance;
57 }
59 constexpr static T* getSingletonPointer(void){ return _pInstance; }
60
62 //-------------------------------------------------------------
64 //-------------------------------------------------------------
66private:
67 static T* _pInstance;
68
70};
71
72template <typename T>
74
75GX_CORE_NAMESPACE_END()
シングルトン基礎クラス
Definition GxSingleton.h:19
SingletonBase(void)
コンストラクタ
Definition GxSingleton.h:26
static constexpr T * getSingletonPointer(void)
ポインタを取得
Definition GxSingleton.h:59
static GX_FORCE_INLINE T & getSingleton(void)
参照を取得
Definition GxSingleton.h:53
~SingletonBase(void)
デストラクタ
Definition GxSingleton.h:34