【发布时间】:2016-06-09 16:27:35
【问题描述】:
考虑下面的一对函数:
double MYAPI foo(double x) {
return x;
}
Register register_foo_([] {
return reg(&foo, "foo", ...); // function name repeated used
});
register_foo_ 是一个全局变量,在dllmain 之前初始化,其构造函数采用一个 lambda,该 lambda 从字面上重复引用它上面的函数名称。如果注册码可以在上面的函数中移动以减少出错的机会,那就太好了。我试过了:
double MYAPI foo(double x) {
static Register register_foo_([] {
return reg(&foo, "foo", ...); // static local does not initialize before dllmain
});
return x;
}
如果上面的代码有效,那么我可以轻松地将其转换为使用__FUNCNAME__ 的宏。有没有办法在dllmain之前强制初始化静态局部变量register_foo_?
【问题讨论】:
-
如果调用
foo没有不良副作用,可以在dllmain开头调用 -
所以基本上你想在main之前调用一个函数?还是我弄糊涂了?
-
@Praetorian 这试图实现的是自动跟踪注册的功能。所以调用 dllmain 不起作用,因为我需要明确地写出函数名称。
-
@Galik 是的,我想在 dllmain 之前自动初始化一些东西。