我有一个可以通过 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/