summaryrefslogtreecommitdiff
path: root/Client/Source/Utilities/StaticInitiator.h
diff options
context:
space:
mode:
Diffstat (limited to 'Client/Source/Utilities/StaticInitiator.h')
-rw-r--r--Client/Source/Utilities/StaticInitiator.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/Client/Source/Utilities/StaticInitiator.h b/Client/Source/Utilities/StaticInitiator.h
new file mode 100644
index 0000000..af264af
--- /dev/null
+++ b/Client/Source/Utilities/StaticInitiator.h
@@ -0,0 +1,30 @@
+#pragma once
+
+//https://stackoverflow.com/questions/1005685/c-static-initialization-order
+//https://stackoverflow.com/questions/211237/static-variables-initialisation-order
+
+// ��̬���캯��
+#include "StaticConstructor/include/StaticConstructor.h"
+
+typedef void(*StaticFunc) ();
+
+// �Զ���ʼ����̬����
+class StaticFuncInvoker
+{
+public:
+ // Default Constructor:
+ StaticFuncInvoker(StaticFunc func)
+ {
+ if (func)
+ func();
+ }
+};
+
+// ���þ�����static����
+#define InvokeStaticFunc(func)\
+ static StaticFuncInvoker staticInvokerOf_##func(func);
+
+// ������ʼ����ǰcpp��ľ�̬��������Ҫע��static������ʼ��˳��Static Initialization Order��
+#define InitializeStaticVariables(lambda)\
+ static StaticFuncInvoker staticInvoker(lambda);
+