8

例如,我有一个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,传递一个参数。

既然是用 C++ 实现的,假设类已经有一个 Lua 状态指针CPerson,需要做哪些改变来实现?Eat()CPerson

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

Edit2:CPersonbannana表都是通用示例,可​​以假设CPerson该类已经有一个 LuaState 指针/引用,并且该Eat方法的函数签名可以由回答的人更改。

4

2 回答 2

9

忽略任何错误检查...

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);
于 2009-12-11T17:00:31.150 回答
-1

也许“更简单的 Cpp 绑定”会有所帮助。

于 2009-12-11T15:15:27.600 回答