KisaragiLibrary
 
読��り中…
検索中…
一致�る文字列を見��られ��ん
Singleton.hpp
[詳解]
1#pragma once
2
3#include <cassert>
4#include <mutex>
5#include <functional>
6
7namespace Kisaragi_Lib
8{
9 /// <summary>
10 /// mozcŽ® Singletonƒpƒ^�[ƒ“
11 ///
12 /// Žg—p—á :
13 /// hoge& hoge = Singleton<hpge>::GetInstance();
14 /// </summary>
16 public:
17 //•Ê–¼’è‹`
18 using FinalizerFunc = std::function<void()>;
19
20 /// <summary>
21 /// Finalize‚ð“o˜^.
22 /// </summary>
23 /// <param name="func">Finalize</param>
24 static void addFinalizer(FinalizerFunc func);
25
26 /// <summary>
27 /// “o˜^‚³‚ꂽFinalize‚ðŽÀ�s‚·‚é.
28 /// </summary>
29 static void finalize();
30 };
31
32 template <typename T>
33 class Singleton final {
34 public:
35 /// <summary>
36 /// TŒ^‚̃Cƒ“ƒXƒ^ƒ“ƒX‚ðŽæ“¾‚·‚é.
37 /// </summary>
38 /// <returns>TŒ^‚̃Cƒ“ƒXƒ^ƒ“ƒX</returns>
39 static T& GetInstance() {
40 std::call_once(initFlag, create);
41 assert(instance);
42 return *instance;
43 }
44
45 //TODO weak_ptr‚Å‚ ‚é•K—v�«‚É‹^–₪Žc‚é
46 /// <summary>
47 /// TŒ^‚̃Cƒ“ƒXƒ^ƒ“ƒXptr‚ðŽæ“¾
48 /// </summary>
49 /// <returns></returns>
50 static std::weak_ptr<T> GetPtr()
51 {
52 std::call_once(initFlag, create);
53 assert(instance);
54 return instance;
55 }
56
57 private:
58 /// <summary>
59 /// ƒCƒ“ƒXƒ^ƒ“ƒX�¶�¬.
60 /// </summary>
61 static void create() {
62 instance = std::make_shared<T>();
64 }
65
66 /// <summary>
67 /// ƒCƒ“ƒXƒ^ƒ“ƒX�í�œ
68 /// </summary>
69 static void destroy() {
70 instance.reset();
71 }
72
73 static std::once_flag initFlag;
74 static std::shared_ptr<T> instance;
75 };
76
77 template <typename T> std::once_flag Singleton<T>::initFlag;
78 template <typename T> std::shared_ptr<T> Singleton<T>::instance;
79}
mozcŽ® Singletonƒpƒ^�[ƒ“
Definition Singleton.hpp:15
static void addFinalizer(FinalizerFunc func)
Finalize‚ð“o˜^.
Definition Singleton.cpp:23
std::function< void()> FinalizerFunc
Definition Singleton.hpp:18
static void finalize()
“o˜^‚³‚ꂽFinalize‚ðŽÀ�s‚·‚é.
Definition Singleton.cpp:35
Definition Singleton.hpp:33
static T & GetInstance()
TŒ^‚̃Cƒ“ƒXƒ^ƒ“ƒX‚ðŽæ“¾‚·‚é.
Definition Singleton.hpp:39
static std::once_flag initFlag
Definition Singleton.hpp:73
static std::shared_ptr< T > instance
Definition Singleton.hpp:74
static std::weak_ptr< T > GetPtr()
TŒ^‚̃Cƒ“ƒXƒ^ƒ“ƒXptr‚ðŽæ“¾
Definition Singleton.hpp:50
static void create()
ƒCƒ“ƒXƒ^ƒ“ƒX�¶�¬.
Definition Singleton.hpp:61
static void destroy()
ƒCƒ“ƒXƒ^ƒ“ƒX�í�œ
Definition Singleton.hpp:69
Definition Accessor.hpp:110