从C++中调用Lua表中的函数

我有一个 Lua 表/对象,其中有一个名为 chew 的函数,需要传递一个参数:

bannana.chew(5)

同时,我也使用过 SWIG,有一个 CPerson 类:

class CPerson {
    public:
        // ....
        void Eat();
        // ....
};

可以从 Lua 中获取此对象的实例:

person = engine:getPerson()

我需要能够执行以下 Lua 代码:

person = engine:getPerson()
person:Eat(bannana)

其中 person:eat 会调用 bannana 表中的 chew 函数并传递一个参数。

由于 CPerson 是用 C++ 实现的,因此需要哪些更改来实现 Eat() 呢?假设 CPerson 类已经有一个 LuaState 指针。请注意,CPerson 类和 bannana 表都是一般示例,可以假定 Eat 方法的函数签名可以由回答此问题的人更改。

Edit1: 我不想知道如何将 C++ 类绑定到 Lua,我已经用 SWIG 实现了这一点,我想知道如何从 C++ 中调用 Lua 表中的 Lua 函数。

Edit2: CPerson 类和 bannana 表都是一般示例,可以假定 CPerson 类已经有一个 LuaState 指针/引用,Eat 方法的函数签名可以由回答该问题的人更改。

原文链接 https://stackoverflow.com/questions/1888672

点赞
stackoverflow用户53861
stackoverflow用户53861

或许 "Simpler Cpp Binding" 会有帮助。

2009-12-11 15:15:27
stackoverflow用户15795
stackoverflow用户15795

忽略任何错误检查...

lua_getglobal(L,"banana"); //或从person:Eat()获取“banana”
lua_getfield(L,-1,“chew”);
lua_pushinteger(L,5);
lua_pcall(L,100);
2009-12-11 17:00:31