我是一個非常新的swig,我想創建一個swig包裝器,以便在python中使用幾個C++文件。我有以下C++類。創建Swig包裝的C++(指針)到python
以下是代碼片段,我想轉換:
/*packet_buffer.h*/
class CPacketBuffer {
public:
// construct based on given buffer, data is not copied
CPacketBuffer(uint8_t* data, uint32_t length) {
mpBuffer = data;
mLength = length;
mHead = 0;
mTail = length;
}
uint8_t* GetBuffer() {
return (mpBuffer + mHead);
}
void Add(const uint8_t* data, uint32_t length) {
if ((mTail + length) > mLength) {
length = (mLength - mTail);
}
//....
}
我一直想寫一個example.i文件,將接受指針類型定義(uint8_t *)今天一天都使用swig文檔的幫助,但我一直不成功。
以下是我試過的packet_buffer.i文件,它不起作用。
%module packet_buffer
%include typemaps.i
%apply unsigned char* {uint8_t*};
%apply unit8_t *INPUT {uint8_t *data};
%{
#define SWIG_FILE_WITH_INIT
#include "../include/packet_buffer.h"
%}
%include "../include/packet_buffer.h"
- 我如何寫該採取指針的typedef成員函數痛飲代碼?
- 我可以寫一個可以在代碼中使用的通用%應用程序,還是必須爲每個INPUT,OUTPUT參數編寫特定的代碼?
非常感謝回覆。由於這些是低級包處理程序,我們不允許使用STL。這工作沒有錯誤,但我不知道如何轉換這樣的函數uint8_t * GetBuffer()返回(mpBuffer + mHead); },它返回一個指向成員的指針? –
@GuruGovindan - 我已經添加了一個更新的語法去其他方式。就我個人而言,我仍然認爲排除'std :: vector'是一個錯誤,它可能會降低您的缺陷率,如果您可以制定切實可行的基準測試,那麼它會非常驚訝。 (尤其是Python方面的一個)。 – Flexo
感謝您的更新awoodland,很遺憾,我無法做出改變設計的決定。但我會明確地建議使用矢量。 –