summaryrefslogtreecommitdiff
path: root/Runtime/Utilities/StaticInitiator.h
blob: b7b41aaa89d09ddb8cb630f312d41afe632e82de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#pragma once

//https://stackoverflow.com/questions/1005685/c-static-initialization-order
//https://stackoverflow.com/questions/211237/static-variables-initialisation-order

// 静态构造函数
#include "ThirdParty/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);