2014-09-30 23 views
0

我有一個可以通過C++類(https://github.com/stanleyseow/RF24/tree/master/RPi/RF24)控制的設備。包裝C++類以便在Python中使用

我希望能夠在Python中使用這個類,並認爲我可以包裝它。

我發現了很多方法來做到這一點,但沒有太多詳細的文檔和例子。特別是,我找到了Boost,Cython,SWIG和本地C Python API。

哪一個是最好的方法?你有沒有關於這方面的詳細文件/例子的鏈接?

謝謝!

回答

1

沒有「最好的」;這完全取決於你的情況。

對於單個類,本機C Python API不是太難,但您必須創建一個完整的模塊,然後創建類。它 會更簡單,如果你暴露程序的接口,而不是一個類 。如果你只有一個設備實例,這個 將是一個合適的解決方案。

SWIG非常適合採用C++類定義,並且生成一個包含它們的Python模塊。由此產生的 代碼相對比較複雜,因爲SWIG試圖覆蓋所有可能的Python版本 ;對於任何2.7或更高版本(和 也許稍早),您可以直接在 C++中執行所有操作,而無需任何中間Python。

Boost廣泛使用模板。這不是真正的 適合該問題的解決方案;它爲增加了很多複雜性,如果使用 外部工具,而不是元編程,那麼它的複雜度相對較爲簡單。不過,如果潛在的複雜性不會讓你感到恐慌,那麼很難使用 。

我對Cython不熟悉。

在全球範圍內,如果你已經是使用原生C API一個簡單的類, 的一個實例,可能沒有比 其他解決方案更加困難,並引入了最低的添加的內部 的複雜性。

+0

現在,我只需要這個類的一個實例。但是,如果能夠處理一個類的多個實例並不複雜,我認爲這可能是值得的。 – Phyks 2014-09-30 11:29:06

+0

對不起,我搞砸了最後的評論...:現在,我只需要這個類的一個實例。但是,如果能夠處理一個類的多個實例並不複雜,我認爲這可能是值得的。我需要我生成的Python代碼爲Python 3.3+兼容。我會看看SWIG和標準的C API。 – Phyks 2014-09-30 11:35:19

+0

這有點複雜:你必須先創建模塊及其功能,然後將類添加到它。定義一個類並不複雜,但它很冗長:例如,你需要填寫一個巨大的結構。 – 2014-09-30 12:46:23

相關問題