您如何使用JIT编译从捕获的lambda生成C指针回调?

问题描述 投票:0回答:1

在C ++ 11及更高版本中,转换没有捕获变量的lambda表达式非常简单,但是要使具有捕获变量的lambda正确执行此操作,则需要按照此人answer的要求动态生成代码。

基本上,我认为必须动态生成的是这个。 (请注意,此处的代码表示我想要的语义,而不是任何实际代码)

UserData *userdata;
api_return_value callback(api_data arg) {
    return customized_callback(arg, userdata);
}

并且我将生成此代码,因此我可以将动态生成的代码绑定到某些api中定义的相应函数指针回调中]

api_return_value (*callback) (api_data);

是否有使用LLVM或NativeJIT之类的方式进行清理的合理且可移植的方式?我被困在没有提供用户数据指针的C api中,所以这似乎是我唯一的选择。

在C ++ 11及更高版本中,转换没有捕获变量的lambda表达式非常简单,但是对于具有捕获变量的lambda,要正确执行此操作,需要按照此人的要求动态生成代码...

c++ lambda llvm function-pointers jit
1个回答
1
投票

而不是在运行时生成JIT代码,您可以在编译时“预创建”(外部“ C”)函数池并管理它们的分配池。类似于:

© www.soinside.com 2019 - 2024. All rights reserved.