Lua - C++ 集成:从 C++ 调用表中的函数
Posted
技术标签:
【中文标题】Lua - C++ 集成:从 C++ 调用表中的函数【英文标题】:Lua - C++ Integration: Calling function in table from C++ 【发布时间】:2016-08-04 11:58:17 【问题描述】:我不是 Lua 专家,但我已经红色了一些文章来了解它是如何工作的。但是,我在调用属于 C++ 表的 lua 函数时遇到问题。
在下面描述的示例中,我试图从代码中调用 foo:bar。通话成功。但是参数“a”是 nil(返回值是正确的 - 当我将返回值更改为例如 10 时,它会显示正确的结果)
我在将函数参数推送到脚本时是否遗漏了什么?
lua_State* state = LuaIntegration->GetLuaState();
lua_getglobal(state, "foo");
if(lua_istable(state, lua_gettop(state)))
lua_getfield(state, -1, "bar");
if(lua_isfunction(state, lua_gettop(state)))
lua_pushinteger(state, 0);
if (lua_pcall(state, 1, 1, 0) != 0)
ErrorMessage = lua_tostring(state, -1);
ReturnValue = lua_tointeger(state, -1);
在lua中调用函数:
foo = base_foo:new()
function foo:new(o)
o = o or
setmetatable(o, self)
self.__index = self
return o
end
function foo:bar(a)
if a==10 then
return a
end
return 0
end
【问题讨论】:
【参考方案1】:您忘记了 C++ 调用中的糖。
如果您阅读lua manual 的Function Calls 部分,您会看到
调用
v:name(args)
是v.name(v,args)
的语法糖,但v
只计算一次。
这意味着base_foo:new()
真的只是base_foo.new(base_foo)
。
这就是您在 C++ 调用中缺少的内容。
调用时需要将表作为第一个参数传递给函数。
【讨论】:
嗯,有道理。谢谢以上是关于Lua - C++ 集成:从 C++ 调用表中的函数的主要内容,如果未能解决你的问题,请参考以下文章