summaryrefslogtreecommitdiff
path: root/Client/Source/Utilities/StaticInitiator.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-12-13 00:07:19 +0800
committerchai <chaifix@163.com>2021-12-13 00:07:19 +0800
commit60cbbdec07ab7a5636eac5b3c024ae44e937f4d4 (patch)
treeb2c7b0a868f18159dbc43d8954e1bd7668549a88 /Client/Source/Utilities/StaticInitiator.h
+init
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);
+