繁体   English   中英

在C ++中访问lua类函数

[英]accessing lua class functions in C++

我遇到了绑定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中的函数,而不会在“类”的特定实例上调用该特定函数。

所以基本上我想做的是

  • 获取对C ++中lua类的实例的访问
  • 在特定实例上调用函数

之所以要这样做,是因为我发现在性能方面,在lua中使用C ++函数比在C ++中使用lua函数需要更多的精力,因此要能够使用lua扩展实体而无需lua代码调用很多C ++函数,我需要访问C ++中的lua类,而不是访问lua中的C ++类。

m_newObj:functionname(parameter)

这是语法糖

m_newObj.functionname(m_newObj, parameter)

因此,只需执行C ++代码中的等效操作即可。

将您的lua_getfield()入堆栈, lua_getfield()将函数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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM