3

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

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

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

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

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

谢谢你的尽心帮助!

4

3 回答 3

1

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

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

于 2009-05-19T19:03:22.323 回答
1

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

于 2009-05-19T23:00:32.437 回答
0

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

于 2010-03-07T22:12:47.507 回答