是否可以使用 c++ 中的函数带有 luajit ffi 的命名空间?

发布于 2024-11-20 00:46:33 字数 146 浏览 3 评论 0原文

我有很多 C++ 代码,其中包含命名空间中的很多函数和类(例如 boost)。
现在我尝试嵌入 LuaJiT2 作为脚本引擎,但我找不到任何有关调用函数和使用命名空间中其他内容的信息。
那么,是否可以使用 FFI 将函数从 C++ 命名空间传递到 LuaJIT?

I've got a lot of c++ code which contains a lot of functions and classes in namespaces (boost, for example).
Now I'm trying to embed LuaJiT2 as script engine, but I cannot find anything about calling functions and using other stuff from namespaces.
So, Is it possible to pass the functions from c++ namespaces to LuaJIT with the FFI?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

缱倦旧时光 2024-11-27 00:46:33

您可以使用标准 Lua API 向 Lua 公开名称空间范围函数以及类静态函数。这与使用常规 Lua 解释器完全一样,因为 LuaJIT 与其直接兼容。

但您不能使用 FFI,因为 FFI 是基于基于 C 的头文件解析。并且您正在使用 C++ 语法。 FFI 并不是使用 LuaJIT 的唯一方式;它只是基于 C 的一个。

任何使用 Lua 的特定于 C++ 的绑定 API(Luabind、SWIG 等)也应该与 LuaJIT 一起正常工作。

You may use the standard Lua API to expose namespace-scope functions, as well as class static functions, to Lua. This is done exactly as you would with the regular Lua interpreter, since LuaJIT is drop-in compatible with it.

But you can't use FFI, because FFI is based on a C-based parsing of the header files. And you're using C++ syntax. FFI is not the only way to use LuaJIT; it's just one that is based on C.

Any of the C++-specific binding APIs that use Lua (Luabind, SWIG, etc) should work just fine with LuaJIT as well.

坏尐絯 2024-11-27 00:46:33

可以使用 C 以外的不同名称重整。它不“常见”的原因是因为 C++ 名称重整是非常特定于编译器/平台的:
http://lua-users.org/lists/lua-l /2011-07/msg00502.html

因此这种声明是有效的:

ffi.cdef[[
void Test1_Method1(void) asm("_ZN5Test17Method1Ev");
]]

然后您可以调用 Test1_Method1。
Mike Pall 在 luajit 方面做了出色的工作。这么多很棒的功能。

It is possible to use different name mangling other than C. The reason why its not "common" is because the C++ name mangling is very compiler/platform specific:
http://lua-users.org/lists/lua-l/2011-07/msg00502.html

So this sort of declaration is valid:

ffi.cdef[[
void Test1_Method1(void) asm("_ZN5Test17Method1Ev");
]]

And you can then call Test1_Method1.
Mike Pall has done an amazing job with luajit. So many great features.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文