2009-05-19 85 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++。