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

标签 python c++ boost wrapper cython

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

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

我找到了很多方法来做到这一点,但没有太多带有示例的详细文档。特别是,我发现了 Boost、Cython、SWIG 和原生 C Python API。

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

谢谢!

最佳答案

没有“最好”;这完全取决于您的情况。

对于单个类,原生 C Python API 并不太难, 但是你必须创建一个完整的模块,然后是类。它 如果你公开一个程序接口(interface)会更简单,而不是 比一个类(class)。如果您只有一个设备实例,则此 将是一个合适的解决方案。

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

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

我不熟悉 Cython。

在全局范围内,如果您只有一个简单类的一个实例, 使用 native C API 可能并不比 其他解决方案,并引入了最少的内部添加 复杂性。

关于python - 包装 C++ 类以在 Python 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26117548/

相关文章:

c++ - 使用 boost 的运行时错误 - undefined symbol : _ZN5boost6system15system_categoryEv

c++ - Boost - 子进程仍然是僵尸进程

python - 寻找交叉点基于区域的轨迹与线轨迹

c++ - 无法理解 gluLookAt 参数

java - 诺基亚N73如何过滤来电

c++ - 使用 getline() 而不设置 failbit

python - 如何从 tox 控制台输出中隐藏已安装的 deps 列表?

python - 正则表达式不将匹配识别为 True

python - "pywhatskit"在 python 上不发送消息

c++ - Boost 客户端卡住