我有一个C ++库,我需要能够与python接口。我读了this question以了解我需要适应的选择。
我看到SWIG和Cython并希望选择SWIG,主要是因为我的python编程经验非常少。但是,我意识到使用Swig我必须为每个类编写一个接口(.i扩展名)。现在,我的C ++项目非常庞大,我觉得我需要花费大量时间来制作封装(或者我错了)。
所以现在因为我的应用程序很大,我需要做出选择。在引用的帖子中,我遇到了Boost Python。现在我不能再决定并希望那些可以告诉我一个人的优点和缺点的人的意见。请注意我的偏好是易于使用以及它可以多快完成。我愿意为此牺牲系统性能。如果有人能为我提供一个SWIG实现的项目或Boost Python实现的项目链接,我将非常感激(完整的模块而不是示例教程会更好!)
答案 0 :(得分:4)
Boost :: python在C ++和Python之间提供了几乎无包装的接口。它还允许您编写自定义转换器和其他巧妙的东西,使Python接口更好。接口是纯C ++,但它们依赖于模板和巧妙的设计模式,使它看起来很漂亮和声明。您还可以直接通过编译器检查连接器代码的好处。
使用Swig,您可以在Swig自己的DSL中编写接口声明,这需要几天时间才能完成。此外,它总是插入一个包装层,所以它可能会慢一点。但是,它确实具有自动转换许多东西的好功能,而无需额外声明任何内容。它生成的包装器很难调试。
IMHO boost :: python是更好的选择,因为你直接使用CPython的原生C接口。我使用Swig进行Java和C ++交互,因为JNI是一个熊,Python的C接口实际上非常可用。
如果你已经拥有一堆Swig包装器,我会保留它们,因为你必须重做所有这些工作。但是,启动一个新项目,或者如果你需要最大性能,请一直使用boost :: python!