为什么要使用SWIG通过C接口包装C ++库?

时间:2014-02-25 18:49:38

标签: python c++ c wrapper swig

SWIG新手探索包装大型C ++库主要用于Python访问的可行性。与开发C ++的开发人员一起提议编写一个C互操作层,然后将其包装在SWIG中。

两个可能的选择是:

   Base|  Interop  | Scripting Access

============================================

1) C++ |    SWIG   | Supported Languages

2) C++ | C | SWIG  | Supported Languages.

#2是否会增加一些我缺少的功能或稳定性?它看起来像是一层增加的复杂性。任何人都可以建议为什么C层可能是更好的SWIG包装界面? (一般来说,你没有看过图书馆等)。

2 个答案:

答案 0 :(得分:2)

SWIG非常强大,它将消除许多你必须编写的费力的样板代码。即使使用boost :: python也有这样的样板代码,尽管远比从头做任何事情要少得多。 SWIG的优点在于它还可以轻松地与其他语言集成。例如,我有一个C ++库,我正在向C#公开,所以我可以在C#/ WPF中构建GUI,并使用相同的SWIG输入文件,暴露给Lua,以便GUI可以通过C ++层编写脚本。太棒了!

关于#2选项的C层,我没有看到好处,除非你想要与不支持C ++的语言集成,但我不知道这种语言(SWIG支持大约20个)我只知道4,所以也许其中一个有这样的限制)。 SWIG非常强大,实际上可以包装相当复杂的接口。使用SWIG,如果您希望使用%inline和%extend指令,则可以完全更改API。我想不出需要C层的原因。

答案 1 :(得分:0)

查看直接使用C ++的Boost Python