2009-05-19 76 views
3

我正在使用大量类(150+)的C++项目,每个类都有10到300个字段左右的区域。我真的很想为测试目的提供一个脚本接口,这样我就可以编写不需要重新编译的回调代码。我想在Lua中这样做,因为我比C++更熟悉C API,但如果它能够节省头痛,我很乐意在Python中完成这项工作。通过Swig在C++和Lua之间传递变量

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

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

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

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

感谢您提供的任何帮助!

回答

1

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

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

+0

这很好,谢谢你的链接!即使只是单向也是一个很大的帮助。 即使我不能在Lua中创建一个对象的全新实例并将它传回给C++,您知道我是否可以*修改*传递给Lua的现有C++对象?也就是说,我可以创建一个C++对象,将它传递给Lua,更改Lua中的几个字段,然后在C++中使用它更新的字段? – zslayton 2009-05-19 19:23:35

0

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

0

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