Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SIP如何处理C++;返回int的方法* 我试图让一个C++库作为Python模块可用。看来SIP是这项工作的最佳工具。(如果错了,请纠正我。)_C++_Python_Swig_Python Sip - Fatal编程技术网

SIP如何处理C++;返回int的方法* 我试图让一个C++库作为Python模块可用。看来SIP是这项工作的最佳工具。(如果错了,请纠正我。)

SIP如何处理C++;返回int的方法* 我试图让一个C++库作为Python模块可用。看来SIP是这项工作的最佳工具。(如果错了,请纠正我。),c++,python,swig,python-sip,C++,Python,Swig,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: e

一个类看起来像是程序员试图绕过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()。更好的方法是使用一个Python函数自动调用getType(),然后调用其中一个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();
};
类项目{
%打字头代码
#包括
%结束
公众:
枚举项类型{
类型_INT=0,
类型_FLOAT=1,
类型_INT_数组=2,
类型\浮点数\数组=3,
};
ITEMTYPE getType();
int getItemCount();
int getIntValue();
//int*getIntArrayValue();
float getFloatValue();
//float*getFloatArrayValue();
};

谢谢。我一直在搜索,但我已经空了。

< P>我不知道SIP,但是我用SWIG把C++封装到Python模块中,这是非常简单的。SWIG可以自动处理大多数标准的C++数据类型(包括标准库容器)。

< P>你可以将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
};
类项目
{
%打字头代码
#包括
%结束
公众:
...
SIP_PYLIST getIntArrayValue();
%方法码
int iSize=;//我们假设知道数组大小
sipRes=PyList_New(iSize);
对于(int i=0;i intarrayValue[i]);
%结束
};