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

时间:2009-12-11 15:06:22

标签: c++ lua swig

我有一个Lua表/对象:

bannana

这个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将调用chew表中的bannana函数,传递参数。

由于CPerson是在C ++中实现的,假设Eat()类已经有一个Lua状态指针,那么实现CPerson需要做哪些更改?

Edit1:我不想知道如何将C ++类绑定到Lua,我已经有SWIG为我做这个,我想知道如何在Lua表中调用Lua函数, C ++。

Edit2: CPerson类和bannana表都是一般示例,可以假设CPerson类已经有一个LuaState指针/参考,以及Eat方法的功能签名可以由回答的人改变。

2 个答案:

答案 0 :(得分:10)

忽略任何错误检查......

lua_getglobal(L, "banana"); // or get 'banana' from person:Eat()
lua_getfield(L, -1, "chew");
lua_pushinteger(L, 5);
lua_pcall(L, 1, 0, 0);

答案 1 :(得分:-1)

也许“Simpler Cpp Binding”会有所帮助。