C++和Lua,将Lua表作为参数推送

我正在将Lua集成到C++中,现在我有一个表格,它的行为就像一个“类”,对于一些函数它需要一个“self”参数,实际上就是这个表格。Lua代码如下:

a = {
numb = 5,

create = function(a)
    print(a);
end,

increment = function(self)
                            --self.numb = 6;
                            print(self.numb);
end,

decrement = function(self,i)
                            self.numb = self.numb-i;
                            print(self.numb);
end
};
b = a;

然后C++部分调用函数的代码(我在C++中运行了Lua):

luaL_openlibs(L);

luaL_dofile (L,"main.lua");

lua_getglobal(L, "a");
lua_getfield(L, -1, "increment");

string arg = "a";

lua_pushliteral(L,"a");

lua_pcall(L ,1,0,0);

printf(" \nI am done with Lua in C++.\n");

lua_close(L);

那么,我如何将表格作为self参数传递到函数increment中?

感谢任何帮助。

点赞
用户33252
用户33252

在 Lua 5.1 中,你可以使用 lua_getglobal 来获取全局变量,比如表 a,就像你在上面几行代码中获取表一样;你只需要复制那个值,传递给你的函数即可。

 lua_getglobal(L, "a"); -- 现在栈上有表 a
 lua_getfield(L, -1, "increment"); -- 紧跟着的是 a.increment 的值

 lua_pushvalue(L,-2); -- 把表 a 作为参数

 lua_pcall(L,1,0,0);
2012-06-27 20:27:50