我有一个Lua表/对象:
bannana
Run Code Online (Sandbox Code Playgroud)
而这个Lua表在其内部有一个函数调用chew,它接受一个参数
bannana.chew(5)
Run Code Online (Sandbox Code Playgroud)
我也使用过SWIG,例如有一个类CPerson:
class CPerson {
public:
// ....
void Eat();
// ....
};
Run Code Online (Sandbox Code Playgroud)
我可以从Lua获取此对象的实例:
person = engine:getPerson()
Run Code Online (Sandbox Code Playgroud)
我需要做的是以下Lua代码:
person = engine:getPerson()
person:Eat(bannana)
Run Code Online (Sandbox Code Playgroud)
在哪里person:eat调用表中的chew函数bannana,传递一个参数.
既然CPerson是用C++实现的,那么Eat()假设CPerson类已经有一个Lua状态指针,需要进行哪些更改?
Edit1:我不想知道如何将C++类绑定到Lua,我已经有SWIG为我做这个,我想知道如何从C++中调用Lua表中的Lua函数.
EDIT2:所述CPerson类和bannana表,都是通用的示例,可以假设的是,CPerson类已经有一个LuaState指针/引用,并且所述的函数签名Eat方法可以由人应答而改变.
uro*_*roc 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);
Run Code Online (Sandbox Code Playgroud)