Lua/Binding 中使用 C++ 函数

基本上我正试图找到一种方法,在 Lua 中使用不是 lua_CFunction(不返回 int 并带有 lua_State 参数的函数)的 C++ 函数。基本上是普通的 C++ 函数。但是,问题在于我正试图找到一种方法,无需编写自己的专用 lua_CFunction(基本上假设我已经有一个程序或一堆在 C++ 中的函数,我想在 Lua 中使用它们,我不想为每个函数编写新函数)。

假设我有一个非常简单的 C++ 函数:

static int doubleInt(int a) {
    return a*2;
}

(有或没有 static,都应该不重要)。

假如我想通过在 lua 脚本中调用 doubleInt(10) 来在 Lua 中使用此函数。是否有一种方法可以在不为每个单独的函数编写

static int callFunc(lua_State *L) {
    //do stuff to make the function work in lua
}

的情况下做到这一点?是否有类似于 luaBind 中的 def() 函数的东西(我知道它很糟糕,但我实际上不能使用一个单独的专用绑定库;必须编写自己的)。

我知道我必须为此编写带有模板的类,但我甚至没有一点关于如何在 Lua 中获取函数的头绪。我不认为有一种在 C++ 中自动生成自定义函数(可能在编译时)的方法 - 那将是令人惊叹的 - 所以我甚至不知道从哪里开始。

点赞
用户5675002
用户5675002

如果你不受限于标准 Lua 库,可以尝试使用 LuaJIT。它具有 ffi 支持。调用外部函数非常简单:

local ffi = require("ffi")
ffi.cdef[[
int printf(const char *fmt, ...);
]]
ffi.C.printf("Hello %s!", "world")
2016-07-18 15:38:43