考虑下面的一对函数:
double MYAPI foo(double x) {
return x;
}
Register register_foo_([] {
return reg(&foo, "foo", ...); // function name repeated used
});
Run Code Online (Sandbox Code Playgroud)
register_foo_是一个全局变量,在之前初始化dllmain,其构造函数采用一个lambda,它重复引用它上面的函数名称.如果注册代码可以在上面的函数内移动以减少出错的可能性,那将是很好的.我试过了:
double MYAPI foo(double x) {
static Register register_foo_([] {
return reg(&foo, "foo", ...); // static local does not initialize before dllmain
});
return x;
}
Run Code Online (Sandbox Code Playgroud)
如果上面的代码有效,那么我可以很容易地把它变成一个利用它的宏__FUNCNAME__.有没有办法强制register_foo_在dllmain之前初始化静态局部变量?
我想您想要实现类似于以下的语法:
DEFINE_FUNC(void, foo, (double x)) {
return x;
}
Run Code Online (Sandbox Code Playgroud)
...并自动生成样板。Register如果您在声明的帮助下引入上述函数,这实际上非常简单:
#define DEFINE_FUNC(Ret, name, args) \
Ret name args; \
Register register_##name##_([] { \
return reg(&name, #name, ...); \
}); \
Ret name args
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
504 次 |
| 最近记录: |