diff options
Diffstat (limited to 'Client/Source/Utilities/StaticInitiator.h')
-rw-r--r-- | Client/Source/Utilities/StaticInitiator.h | 30 |
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); + |