当前位置:  开发笔记 > 编程语言 > 正文

向Python公开C++ API

如何解决《向Python公开C++API》经验,为你挑选了4个好方法。

我目前正在开发一个项目,我必须用Python包装C++类才能编写程序脚本.所以我的具体经验还涉及在我们的程序中嵌入Python解释器.

我尝试的替代方案是:

Boost.Python的

我喜欢Boost.Python生成的更干净的API,但事实上它需要用户安装额外的依赖项才能让我们切换到SWIG.

痛饮

SWIG对我们的主要优势是它不需要最终用户安装它来使用最终程序.

您曾经做过什么,以及您的经历是什么?



1> Max Maximus..:

我使用过两者(对于同一个项目):Boost与STL更好地集成,特别是C++异常.此外,它的内存管理机制(试图桥接C++内存管理和Python GC)比SWIG更灵活.但是,SWIG有很多更好的文档,没有外部的依赖关系,如果你包裹在SWIG为Python库你比那里得到一个Java/Perl的/ Ruby包装器,以及中途更多.

我不认为有一个明确的选择:对于较小的项目,我会再次使用Boost.Python,对于更大的长寿项目,SWIG的额外投资是值得的.



2> orip..:

编辑 - 罗宾项目遗憾地被遗弃,今天用得不多

我用罗宾取得了巨大的成功.

与C++类型的集成,并创建一个单一的.cpp文件编译,并在您共享对象.



3> bhadra..:

我建议使用SIP.由于以下原因,SIP优于SWIG:

    对于给定的文件集,swig生成比SIP更多的重复(开销)代码.SIP通过使用可以静态或动态链接的库文件来管理生成较少的重复(开销)代码.换句话说,SIP具有更好的可扩展性.

    SIP的执行时间远远少于SWIG的执行时间.参考Python包装工具:性能研究.很遗 我有个人副本,可以根据要求分享.


该返回机器有一份副本:http://web.archive.org/web/20070703071726/http://people.web.psi.ch/geus/talks/europython2004_geus.pdf

4> Toni Ruža..:

pyrex或cython也是混合这两个世界的好方法.

使用这些工具包装C++比包装C有点棘手但可以完成.这是关于它的维基页面.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有