3

我有一个需要能够与 python 交互的 C++ 库。我阅读了这个问题以了解我需要适应的选择。

我看到了 SWIG 和 Cython 并想选择 SWIG,主要是因为我的 python 编程经验非常少。但是,我意识到使用 Swig 我必须为每个类编写一个接口(.i 扩展)。现在,我的 C++ 项目很大,我觉得我需要很多时间才能将包装器到位(或者我可能错了)。

所以现在,由于我的应用程序很大,我需要做出选择。在引用的线程中,我遇到了 Boost Python。现在,我无法再决定并希望得到可以告诉我其中一种优缺点的人的意见。请注意,我的偏好是易于使用以及可以多快完成。我愿意为此牺牲系统性能。如果有人可以为我提供一个 SWIG 实现的项目或 Boost Python 实现的项目链接,我将不胜感激(一个完整的模块而不是示例教程会更好!)

4

1 回答 1

4

Boost::python 在 C++ 和 Python 之间提供了一个几乎没有包装的接口。它还允许您编写自定义转换器和其他使 Python 接口更好的整洁的东西。接口是纯 C++ 的,但它们依赖于模板和巧妙的设计模式,使其看起来非常漂亮和声明性。您还可以从编译器直接检查您的连接器代码中受益。

使用 Swig,您可以在 Swig 自己的 DSL 中编写接口声明,这需要几天时间才能掌握。此外,它总是插入一个包装层,所以它可能会慢一些。然而,它确实有一个很好的特性,可以自动为你转换很多东西,而不必声明任何额外的东西。它生成的包装器很难调试。

恕我直言 boost::python 是更好的选择,因为您可以直接使用 CPython 的本机 C 接口。我使用 Swig 进行 Java 和 C++ 交互,因为 JNI 是一个熊,Python 的 C 接口实际上完全可以自己使用。

如果你已经有一堆 Swig 包装器,我会保留它们,因为你必须重做所有这些工作。但是,开始一个新项目,或者如果您需要最大的性能,boost::python 一路走好!

于 2012-12-20T04:26:06.183 回答