【问题标题】:Pass variables between C++ and Lua via Swig通过 Swig 在 C++ 和 Lua 之间传递变量
【发布时间】:2010-10-27 10:23:46
【问题描述】:

我正在处理一个包含大量类(150 多个)的 C++ 项目,每个类都有 10 到 300 个左右的字段。我真的很想能够提供一个脚本接口用于测试目的,这样我就可以编写不需要任何重新编译的回调。我想在 Lua 中执行此操作,因为我对它的 C API 比对 Python 的更熟悉,但如果这样可以省去麻烦,我很乐意在 Python 中执行此操作。

我已经牢牢掌握了如何从我的 C++ 调用 Lua 函数,反之亦然,并且我知道如何来回传递基本数据类型。我的问题是如何使用 SWIG 在两者之间共享用户指定的数据类型。

例如,在我的 C++ 中,我可能想要评估具有 250 个字段的对象中的几条成员数据。我希望能够将该对象交给 Lua,然后(希望?)使用生成的 SWIG 包装器来操作该对象,显示某些字段,然后将(可能更改的)对象传递回 C++ 以继续使用.

我还希望能够使用包装器在 Lua 中实例化对象的实例,并将其传递给 C++ 以用作对象的普通 C++ 版本。

这可能吗?有人能指点我一个教程或一个明确的例子吗?

感谢您提供的任何帮助!

【问题讨论】:

    标签: c++ scripting lua embed swig


    【解决方案1】:

    只要您使用 Swig 接口包装用户定义的类型(有关 Swig-Lua API 的文档,请参阅here),交互应该是无缝的。提供的 Swig 包装器将允许您实例化新对象,将它们传递给 C++,反之亦然。

    我不相信 Swig-Lua 包装支持导向器类,这意味着扩展现有类、实例化它们并将它们传递回 C++ 是不可能的。导演支持 Python、Java、C# 等语言。

    【讨论】:

    • 太好了,谢谢你的链接!即使只走一条路也是一个很大的帮助。即使我不能在 Lua 中创建一个全新的对象实例并将其传递回 C++,您知道我是否可以修改已传递给 Lua 的现有 C++ 对象吗?也就是说,我可以创建一个 C++ 对象,将其传递给 Lua,更改 Lua 中的几个字段,然后在 C++ 中使用更新后的字段继续使用它吗?
    • 是的,当然。修改 LUA 中的对象(通过 SWIG 提供的接口)实际上修改了底层 C++ 对象。这一切都非常无缝。 SWIG 在数组、STL、指针、工厂类型函数和基于运算符的类接口(包括智能指针)等语言特性方面也做得很好
    【解决方案2】:

    如果 swig 给你带来麻烦,我有幸使用最新版本的 tolua++,它的唯一目的是绑定 C++ 和 Lua。它需要一个修改过的 .h 文件作为输入,这有点乏味,但不比 Swig 的模块多。我没有理由偏爱其中一个,但了解两者都很好。

    【讨论】:

      【解决方案3】:

      您还应该查看 Luabind。这个实现了 Lua 的 OOP,并且可以将 Lua 中的类和数据类型映射回 C++。

      【讨论】:

        猜你喜欢
        • 2010-10-08
        • 2023-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-16
        • 2019-04-26
        • 2010-10-08
        • 2011-09-26
        相关资源
        最近更新 更多