c++ - 通过 Swig 在 C++ 和 Lua 之间传递变量

标签 c++ scripting lua embed swig

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

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

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

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

这可能吗?有人可以向我指出教程或明确的示例吗?

感谢您提供的任何帮助!

最佳答案

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

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

关于c++ - 通过 Swig 在 C++ 和 Lua 之间传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/884435/

相关文章:

linux - EasyEngine安装过程中如何回答安装问题?

lua - Lua 的 require 函数可以返回多个结果吗?

c++ - 我可以用 native 代码扩展 Corona 吗?

c++ - OpenSceneGraph 未加载 openflight 插件

c++ - 为什么当你没有定义一个函数时你会得到一个链接器错误而不是编译器?

c++ - 通用 lambda、重载、std::is_invocable 和 SFINAE - GCC 和 Clang 之间的不同行为

groovy - 如何使用Groovy从SoapUI TestCase中删除自定义属性?

javascript - 如何使用 WMI 枚举所有 ActiveX 元素?

java - 从 Luaj 运行 Java 方法, "index expected, got string"

c++ - 如何编辑流式字符数组中的元素