我目前正在开发一个项目,我必须用Python包装C++类才能编写程序脚本.所以我的具体经验还涉及在我们的程序中嵌入Python解释器.
我尝试的替代方案是:
Boost.Python的
我喜欢Boost.Python生成的更干净的API,但事实上它需要用户安装额外的依赖项才能让我们切换到SWIG.
痛饮
SWIG对我们的主要优势是它不需要最终用户安装它来使用最终程序.
您曾经做过什么,以及您的经历是什么?
我使用过两者(对于同一个项目):Boost与STL更好地集成,特别是C++异常.此外,它的内存管理机制(试图桥接C++内存管理和Python GC)比SWIG更灵活.但是,SWIG有很多更好的文档,没有外部的依赖关系,如果你包裹在SWIG为Python库你比那里得到一个Java/Perl的/ Ruby包装器,以及中途更多.
我不认为有一个明确的选择:对于较小的项目,我会再次使用Boost.Python,对于更大的长寿项目,SWIG的额外投资是值得的.
编辑 - 罗宾项目遗憾地被遗弃,今天用得不多
我用罗宾取得了巨大的成功.
大与C++类型的集成,并创建一个单一的.cpp文件编译,并在您共享对象.
我建议使用SIP.由于以下原因,SIP优于SWIG:
对于给定的文件集,swig生成比SIP更多的重复(开销)代码.SIP通过使用可以静态或动态链接的库文件来管理生成较少的重复(开销)代码.换句话说,SIP具有更好的可扩展性.
SIP的执行时间远远少于SWIG的执行时间.参考Python包装工具:性能研究.很遗 我有个人副本,可以根据要求分享.
pyrex或cython也是混合这两个世界的好方法.
使用这些工具包装C++比包装C有点棘手但可以完成.这是关于它的维基页面.