我们可以把 C++ 对象传入 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 脚本中使用它们。 请给出一些指针。

点赞
用户2765603
用户2765603

由于您不想在 Lua 内部使用对象(只是将它们传递给 C++),因此您可以在 C++ 中将它们封装为轻量级用户数据(请参阅 这里),随后只需将其弹出(在此之前,您可能需要检查它是否是 is_lightuserdata)。

2015-06-03 07:19:26
用户3125367
用户3125367

假设您已经阅读了一些userdata手册,那么实现起来非常容易。唯一的区别是,在常规的userdata手册中,它们会在Lua函数中创建对象,而您已经有了一个对象。只需推送大小为指针大小的新userdata,并将其元表设置为Lua类的元表(无论如何您已经准备好了)。

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侧的类的元表名称。

2015-06-03 10:53:36