gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:49 25 4
gpt4 key购买 nike

我查看了多个来源,但我就是不理解它们。大多数情况下,它们要么使用像 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 天,但没有任何积极结果。

最佳答案

这不是一个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 的替代品。就个人而言,我更喜欢 squirrel 而不是 Lua,因为它的语法类似于 C,而且它的能力正是我们想要的。此外,您甚至可以声明常量并在其上下文中使用真实的类,而 Lua 在这方面非常失败。 squirrel 的有趣之处在于,设计师是一个一直致力于 FarCry 为其引擎开发 Lua 的人。

关于c++ - 在 Lua 5.2 中返回 C++ 对象的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19497946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com