包装C ++类以在Python中使用

时间:2014-09-30 09:38:57

标签: python c++ boost wrapper cython

我有一个可以通过C ++类(https://github.com/stanleyseow/RF24/tree/master/RPi/RF24)控制的设备。

我希望能够在Python中使用这个类,并且认为我可以将它包装起来。

我找到了许多方法,但没有详细的文档和示例。特别是,我发现了Boost,Cython,SWIG和本机C Python API。

哪种情况最好的方法呢?您是否有关于此的详细文档/示例的链接?

谢谢!

1 个答案:

答案 0 :(得分:1)

没有最好的&#34 ;;这完全取决于你的情况。

对于单个类,本机C Python API并不太难, 但你必须创建一个完整的模块,然后是类。它 如果你暴露了一个程序界面,那会更简单 比一个班级。如果您只有一个设备实例,那么 将是一个合适的解决方案。

SWIG非常适合使用C ++类定义和 生成包含它们的Python模块。所结果的 代码相对复杂,因为SWIG试图覆盖所有代码 可能的Python版本;对于2.7或更高的任何东西(和 或许早一点),你可以直接做所有事情 C ++,没有任何中间Python。

Boost广泛使用模板。这不是真的 解决问题的适当方法;它增加了很多 如果做的话,相对简单的事情的复杂性 外部工具,而不是元编程。不过,如果 潜在的复杂性并不会吓到你,可能不是那样 难以使用。

我不熟悉Cython。

在全球范围内,如果您只拥有一个简单类的一个实例, 使用原生C API可能并不困难 其他解决方案,并引入了最少的内部补充 复杂性。