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

时间:2015-04-15 20:00:21

标签: c++ lua luabind

我理解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()

1 个答案:

答案 0 :(得分:2)

您可以通过luabind将值推送到Lua堆栈:

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

一个可运行的示例:travis-cisource

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