在Lua 5.2中返回C ++对象的实例?

时间:2013-10-21 14:58:42

标签: c++ lua

我查看了多个来源,我只是不理解它们。大部分都是使用像luaBind这样的库(我不想使用它因为它依赖于Boost),或者它们不是C ++中的实例化对象,而是直接在Lua中创建。

我有一个Player类,它包含在另一个类中以处理Lua调用。我在应用程序的初始化中创建了这两个对象的std :: vector列表。

所以基本上我不希望Lua脚本创建这些播放器对象我只想创建一个函数getPlayer()然后返回Lua包装对象。我不知道从哪里开始为Lua定义Lua包装对象,也不知道如何将对象的实例返回给Lua,以便我可以使用它的调用。

以下是我希望我的Lua脚本看起来像的示例:

player = getPlayer(1) -- Returns the Lua wrapped object from C++ where 1 is the object's index in the std::vector list
print("Player's name: ", player:name()) -- Print's the player's name

有人能指点我一个体面的教程,解释如何做到这一点。我很确定这不是某种“从来没有做过,为什么你想要”的情况,所以肯定必须至少有一个教程。我已经搜索了大约2天,没有任何积极的结果。

1 个答案:

答案 0 :(得分:1)

这不是Never been done任务,但他们使用Lua的公司已经对Lua的原始资源进行了大量更改和改进,以使其适合他们想要的地方。由于我们所有的程序员都不太喜欢在第三方来源上做这些事情,我们必须使用那里存在的任何东西。您认为Crytek使用的是完全相同版本的Lua,它位于其网站的存储库中吗?不,先生。

您可以使用userdata来实现这一目标。或者您可以使用meta tables。还有一段名为Luna的代码可以帮助您更快地实现。

否则,这就是所有的Luabind,相信我,你最终会以这种或那种方式使用它。此外,它对Boost的使用并不是那么广泛,最终的可执行文件只会增加200kb。如果你想在某个时候使用Luabind,请查看这个地址,这在网上真的是一篇很好的文章。 http://blog.nuclex-games.com/tutorials/cxx/luabind-introduction/

如果你对Lua太无聊了,我建议你用squirrel代替Lua。就个人而言,我更喜欢松鼠而不是Lua,因为它的C语法和它的能力是我们想要的。此外,您甚至可以声明常量并在其上下文中使用实际类,Lua在此非常失败。关于松鼠的有趣之处在于,设计师是他一直致力于FarCry为其发动机开发Lua的人。