我们可以将C ++对象传递给Lua scrips

时间:2015-06-03 04:00:40

标签: lua

我想将一个C ++对象传递给Lua并在Lua中使用相同的对象。我已经看到了在Lua中创建C ++对象并使用它们的示例。但我想在下面这样做。

  • 使用C ++代码创建C ++对象
  • 将此传递给Lua脚本并获取一些返回值。

我在这里看过这些例子。

http://loadcode.blogspot.sg/2007/02/wrapping-c-classes-in-lua.html
https://gist.github.com/kizzx2/1594905

但是他们在Lua中创建C ++对象并在Lua脚本中使用它们。 你能不能指点一下。

2 个答案:

答案 0 :(得分:2)

鉴于您确实阅读了一些userdata手册,因此很容易实现。唯一不同的是,在常规ud手册中,他们在Lua函数中创建对象,并且您已经有了一个对象。只需按下指针大小的新用户数据,并将其设置为Lua class的metatable(无论如何都准备好了)。

void **ud;
ud = lua_newuserdata(L, sizeof(*ud));
*ud = object; // existing

luaL_getmetatable(L, tname);
lua_setmetatable(L, -2);

// ud at top of stack

lua_setglobal(L, "foo");

其中tname是您的Lua端类metatable名称。

答案 1 :(得分:1)

由于您不想使用Lua中的对象(只是将它们传递给C ++),您可以将它们作为lightuserdata(请参阅here)从C ++中包装,然后将其弹出(你可能想在之前检查它是否is_lightuserdata