当然,你把它放在你的一个头文件中,比如 preinit.h:
class Init { public: Init() { initialize(); } }; Init init;
然后,在您的一个编译单元中,输入:
void initialize(void) {
// weave your magic here.
}
#include "preinit.h"
我知道这是一个杂乱无章的事情,但我不知道有任何可移植的方式来进行预主初始化,而不使用在文件范围内执行的类构造函数。
您还应该小心包含多个这些初始化函数,因为我不相信 C++ 规定了顺序 - 它可能是随机的。
我不确定您所说的这个“草图”,但是否可以在将主编译单元传递给编译器之前使用脚本对其进行转换,例如:
awk '{print;if (substr($0,0,11) == "int main (") {print "initialize();"};}'
您可以看到这将如何影响您的程序,因为:
echo '#include <stdio.h>
int main (void) {
int x = 1;
return 0;
}' | awk '{
print;
if (substr($0,0,11) == "int main (") {
print " initialize();"
}
}'
initialize()
添加调用后生成以下内容:
#include <stdio.h>
int main (void) {
initialize();
int x = 1;
return 0;
}
可能是您无法对生成的文件进行后处理,在这种情况下您应该忽略最后一个选项,但这就是我首先要考虑的。