11#ifndef INCGUARD_MGL_SINGLETON_H_1608105970
12#define INCGUARD_MGL_SINGLETON_H_1608105970
37 static inline std::unique_ptr<std::recursive_mutex> _mutex;
41template<typename T, class... Args>
53 auto &instance = T::GetInstanceRef();
55 if (instance.get() ==
nullptr)
57 instance = STL::make_unique<T>(args...);
58 if (instance.get() !=
nullptr)
64 return *(instance.get());
75 auto &instance = T::GetInstanceRef();
76 assert(instance.get());
77 return *(instance.get());
90 T::GetInstanceRef().reset();
103 return T::GetInstanceRef().get() !=
nullptr;
121template<typename T, class... Args>
135 _instance = STL::make_unique<T>(args...);
180 return _instance !=
nullptr;
196 static inline STL::unique_ptr<T> _instance =
nullptr;
シングルトンテンプレート(共有ライブラリ用)
Definition mgl_singleton.h:43
static T & CreateInstance(Args... args) noexcept
インスタンスの生成
Definition mgl_singleton.h:51
static T & GetInstance() noexcept
インスタンスの取得
Definition mgl_singleton.h:73
static bool HasInstance() noexcept
有効なインスタンスを保持しているかを取得
Definition mgl_singleton.h:101
static void DestroyInstance() noexcept
インスタンスの破棄
Definition mgl_singleton.h:85
シングルトン解放クラス
Definition mgl_singleton.h:24
static void Unregister(FinalizeFunction function) noexcept
シングルトンクラスの登録解除
Definition mgl_singleton.cc:77
static void Register(FinalizeFunction function) noexcept
シングルトンクラスの登録
Definition mgl_singleton.cc:44
static void Finalize() noexcept
登録されたシングルトンクラスの解放
Definition mgl_singleton.cc:61
static bool Initialize() noexcept
シングルトン解放クラスの初期化
Definition mgl_singleton.cc:24
void(*)() FinalizeFunction
解放用の関数の型
Definition mgl_singleton.h:27
シングルトンテンプレート(アプリケーションまたは静的リンクライブラリのみ利用可能)
Definition mgl_singleton.h:123
static void DestroyInstance() noexcept
インスタンスの破棄
Definition mgl_singleton.h:162
static constexpr bool HasInstance() noexcept
有効なインスタンスを保持しているかを取得
Definition mgl_singleton.h:178
static constexpr T & GetInstance() noexcept
インスタンスの取得
Definition mgl_singleton.h:151
static T & CreateInstance(Args... args) noexcept
インスタンスの生成
Definition mgl_singleton.h:131