传递C对象,所以Lua可以使用它

我理解Luabind我可以公开类,然后可以在lua中创建这些类的实例.

module[L_state]
   [
      class_<Player>("Player")
      .def(constructor<>())
      .def("Update",&Player::Update)
   ];

test.lua
player = Player()
player:Update()

但是,如果我想在C中创建该播放器实例,因为我想在C中调用它的成员,但我也希望将相同的播放器实例暴露给Lua,这样它仍然可以调用它的函数,如:

player:Update()

最佳答案 您可以通过luabind将值推送到Lua堆栈:

Player p;
luabind::globals(L)["player"] = p;

一个可运行的例子:travis-ci,source.

附:注意对象的生命周期和所有权问题. LuaBridge手册可以帮助您规划共享对象生存期管理策略.针对LuaBind生命周期策略的更新LuaBind manual.

点赞