【问题标题】:How do you glue Lua to C++ code?如何将 Lua 粘合到 C++ 代码?
【发布时间】:2010-09-11 07:51:18
【问题描述】:

您使用 Luabind、toLua++ 或其他库(如果使用,是哪一个)或根本不使用?

每种方法的优缺点是什么?

【问题讨论】:

  • 有人讨论过这个话题here

标签: c++ scripting lua


【解决方案1】:

我真的不同意“自己动手”的投票,将基本类型和静态 C 函数绑定到 Lua 是微不足道的,是的,但是当您开始处理表和元表时,情况就发生了变化;事情很快变得棘手。

LuaBind 似乎可以完成这项工作,但我有一个哲学问题。对我来说,如果你的类型已经很复杂,那么 Luabind 被大量模板化的事实不会让你的代码更容易理解,正如我的一个朋友所说“你需要 Herb Shutter 来找出编译消息” .再加上它依赖于 Boost,加上编译时间会受到严重影响,等等。

在尝试了一些绑定之后,Tolua++ 似乎是最好的。 Tolua 似乎并没有在开发中,因为 Tolua++ 似乎工作正常(加上一半的“Tolua”教程实际上是“Tolua++”教程,相信我:) Tolua 确实生成了正确的东西,可以修改源代码,它似乎可以处理复杂的情况(如模板、联合、无名结构等)

Tolua++ 最大的问题似乎是缺乏适当的教程、预设的 Visual Studio 项目,或者命令行有点难以理解(你的路径/文件不能有空格 -in Windows 至少 - 等等)不过,对我来说,它是赢家。

【讨论】:

    【解决方案2】:

    部分回答我自己的问题:

    Luabind:一旦您知道如何通过这种笨拙的模板语法来绑定方法和类,添加新绑定就非常简单明了。但是,luabind 具有显着的性能影响,不应该用于实时应用程序。比调用直接操作堆栈的 C 函数的开销大约高 5-20 倍。

    【讨论】:

      【解决方案3】:

      我不使用任何库。前段时间我使用 SWIG 公开了一个 C 库,但是开销太大,我停止使用它。

      优点是更好的性能和更多的控制,但它需要更多的时间来编写。

      【讨论】:

        【解决方案4】:

        使用原始 Lua API 进行绑定——并保持简单。从 API 本身(AUX 库)和 Lua 作者的库中汲取灵感。

        经过一些练习,原始 API 是最佳选择——最大的灵活性和最小的不必要开销。你已经得到了你想要的,没有更多,你需要它的方式。

        如果您必须绑定大型第三方库,请使用自动生成器,如 tolua、tolua++(甚至针对特定情况使用您自己的生成器)。它会让你从体力劳动中解放出来。

        我不推荐使用 Luabind。目前它的发展停滞不前(但开始恢复活力),如果你遇到一些极端情况,你可能会靠自己。 Luabind 也大量使用模板元编程。这可能(也可能不会)是不可接受的,具体取决于观点。

        【讨论】:

        • 除了那些可能使用不支持 TMP 的编译器的人之外,我不明白为什么它是不可接受的。至于开发,有一些(我最近贡献了一个增强/修复),而且大多数时候我不觉得它缺少任何太重要的东西。不过,它并不是非常活跃的。
        猜你喜欢
        • 2011-01-12
        • 2011-06-11
        • 2015-10-21
        • 1970-01-01
        • 1970-01-01
        • 2015-10-26
        • 1970-01-01
        • 2014-05-09
        • 1970-01-01
        相关资源
        最近更新 更多