我遇到了绑定C ++和Lua的问题。 我在Lua中实现了一个简单的类系统,这使我能够使用
从另一个lua文件创建一个lua类的“实例”require 'classname'
m_newObj = classname() --"classname() creates a new instance
然后我可以使用
访问m_newObj中的函数m_newObj:functionname(parameter)
这很好用,但我希望能够从C ++代码访问lua类的实例。
通常,您可以使用
在C ++中创建对lua函数的访问lua_State* pL = luaL_newState();
...
lua_getglobal(pL, "functionName");
lua_call(pL,0,0);
但是这只调用了一个luafile中的函数,它不会在“类”的特定实例上调用该特定函数。
基本上我想做的是
我想要这样做的原因是因为我发现在性能方面,在lua中使用C ++函数比在C ++中使用lua函数需要更多,所以能够使用lua来扩展实体而不需要lua代码调用了许多C ++函数,我需要在C ++中访问lua类,而不是在lua中访问C ++类。
答案 0 :(得分:2)
m_newObj:functionname(parameter)
m_newObj.functionname(m_newObj, parameter)
所以只需从C ++代码中执行相同的操作。
答案 1 :(得分:2)
将您的类推入堆栈,lua_getfield()
函数,然后在调用函数之前将类复制回堆栈顶部。像这样:
int nresults = 1; // number of results from your Lua function
lua_getglobal(L, "classname");
lua_getfield(L, -1, "funcname");
lua_pushvalue(L, -2); // push a copy of the class to the top of the stack
lua_call(L, 1, nresults); // equivalent to classname.funcname(classname)