是否可以使用静态局部变量获取捕获 lambda 的 C 样式函数指针?
我正在尝试将派生函数的第一个参数绑定到original
参数
template <typename F>
class entry_hook
{
public:
entry_hook(void* original, F&& hook)
{
static auto bound = [&](auto&&... args)
{
return hook(original, std::forward<decltype(args)>(args)...);
};
auto* function_ptr = +[](auto&&... args) // -> decltype(bound(std::forward<decltype(args)>(args)...))
{
return bound(std::forward<decltype(args)>(args)...);
};
}
};
使用:
const auto hook = entry_hook(nullptr, [](void* original)
{
// ...
});
编译失败 - 无法将闭包转换为函数指针
从包装 lambda 中删除参数包(通过更改以下行):
auto* function_ptr = +[](auto&&... args)
至auto* function_ptr = +[]()
return bound(std::forward<decltype(args)>(args)...);
至return bound();
成功编译并运行,尽管我假设通过使用可以在编译时在 lambda 上推断的参数包,不会导致该 lambda 成为这样的闭包(不可转换为函数指针,因为它需要语境)
我理想地试图实现:
const auto hook = entry_hook(nullptr, [](auto original, int param1, double param2)
{
// ...
});
whereoriginal
是类型void(*)(int, double)
并且entry_hook
可以将函数指针暴露给传入的 lambda
参考:
此答案将捕获 lambda 转换为函数指针C++ lambda,将捕获作为函数指针
这个答案将 lambda 转换为函数指针获取指向 lambda 的函数指针?