我正在尝试将C ++库作为Python模块提供。似乎SIP是这项工作的最佳工具。 (如果错了,请纠正我。)
一个类看起来像程序员试图解决c缺乏动态类型:
class Item{
private:
enum ITEMTYPE{TYPE_INT,TYPE_FLOAT,TYPE_INT_ARRAY,TYPE_FLOAT_ARRAY};
enum ITEMTYPE type;
int intValue;
int* intArrayValue;
float floatValue;
float* floatArrayValue;
public:
enum ITEMTYPE getType();
int getItemCount();
int getIntValue();
int* getIntArrayValue();
float getFloatValue();
float* getFloatArrayValue();
...
};
我找不到任何说明如何处理返回数组的函数的文档。至少,我希望能够从Python调用getIntArrayValue()。更好的是拥有一个自动调用getType()的Python函数,然后调用其中一个get ??? Value()来获取值(如果需要,调用getItemCount()来确定数组长度,处理数组作为numpy或元组。
我当前的.sil文件如下所示:
class Item{
%TypeHeaderCode
#include<Item.h>
%End
public:
enum ITEMTYPE{
TYPE_INT=0,
TYPE_FLOAT=1,
TYPE_INT_ARRAY=2,
TYPE_FLOAT_ARRAY=3,
};
ITEMTYPE getType();
int getItemCount();
int getIntValue();
//int*getIntArrayValue();
float getFloatValue();
//float*getFloatArrayValue();
};
提前致谢。我一直在努力寻找,但是空洞了。
答案 0 :(得分:0)
我不知道sip,但是我已经使用swig将C ++包装到python模块中,这非常简单。 swig可以自动处理大多数标准C ++数据类型(包括标准库容器)。
答案 1 :(得分:0)
您可以将C ++数组转换为Python列表。 在您的.sip文件中:
class Item
{
%TypeHeaderCode
#include<Item.h>
%End
public:
...
SIP_PYLIST getIntArrayValue();
%MethodCode
int iSize = <your array size>; // We assume knowing the array size
sipRes = PyList_New(iSize);
for(int i=0; i<iSize; ++i)
PyList_SetItem(sipRes, i, PyLong_FromLong(sipCpp->intArrayValue[i]));
%End
};