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

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

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

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

这是我想要我的Lua脚本的样子的例子:

player = getPlayer(1) -- 从C++中返回包装的Lua对象,其中1是std::vector列表中对象的索引
print("Player's name: ", player:name()) -- 打印玩家的名称

有人能指点一下我一个好的教程,解释如何做到这一点吗?我相信这不是某种"从未发生过,你为什么要这样做"的情况,所以肯定至少有一个教程。我已经搜索了约2天,没有任何积极的结果。

点赞
用户520499
用户520499

这不是一个“从未尝试过”的任务,但是使用Lua的公司已经对原始的Lua源代码做了很多改变和改进,使其适应他们想要的地方。由于我们所有程序员都不太酷进行第三方源代码的这种工作,所以我们必须使用存在的东西。您认为Crytek正在使用与其网站存储库上的完全相同的Lua版本吗?不,先生。

您可以使用[userdata](http://lua-users.org/wiki/UserDataExample)使此成为可能。或者,您可以使用[元表](http://lua-users.org/wiki/DoItYourselfCppBinding)。还有另一段名为[Luna](http://lua-users.org/wiki/SimplerCppBinding)的代码,它可以帮助您更快地实现。

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

如果您对Lua感到太无聊,我可能建议您使用[squirrel](http://www.squirrel-lang.org/)作为Lua的替代方案。就我个人而言,我更喜欢松鼠比Lua,因为它的C语言语法以及它的能力是我们想要的。此外,您甚至可以在其上下文中声明常量并使用真实类,而这是Lua相当失败的。有趣的是,关于松鼠的事情是,设计师是一个正在开发Lua引擎的FarCry的人。

2013-10-21 16:16:46