我想将一个C ++对象传递给Lua并在Lua中使用相同的对象。我已经看到了在Lua中创建C ++对象并使用它们的示例。但我想在下面这样做。
我在这里看过这些例子。
http://loadcode.blogspot.sg/2007/02/wrapping-c-classes-in-lua.html
https://gist.github.com/kizzx2/1594905
但是他们在Lua中创建C ++对象并在Lua脚本中使用它们。 你能不能指点一下。
答案 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。