为Python包装静态C ++数组

时间:2012-04-17 12:49:37

标签: python swig ctypes cython boost-python

我正在尝试使用以下两种方式包装一些包含使用指针的类的C ++头文件:

1)作为一个类的数据成员的数组 2)作为数组作为函数的参数

这些类将在Python中进行子类化,并且要覆盖这些方法。

示例头文件看起来像这样:

struct Array{
    int * array;
    int array size;
}

class A{
    public:
        //Meant to be accessed as an array
        virtual void func( int size, double * array) = 0;
        virtual bool func2(long size1, long size2, float * array1, int * array2) = 0;
}

在所有情况下,阵列的大小都是静态的。但是,在某些情况下,数组已经初始化,而在其他情况下,它们没有(因此指针= NULL)。

我需要弄清楚的是:

1)如果C ++数组是类的数据成员,如何包装它? 2)如何处理作为参数传递给函数的C ++数组? 3)如何在Python中分配和初始化包装数组? 4)如何包装C ++数组,以便将Python中的更改传递回原始数组,并且对原始数组的更改将反映在Python中?

编辑:
我不是要求为SWIG,cytpes,Cython和Boost-Python讨论所有四个问题的答案。对所有这四个问题的讨论会很好,但是,我意识到这有点问题。

我倾向于使用SWIG的响应。但是,我标记了所有四个,因为在尝试自己找到这个问题的解决方案时,我发现有关于如何为任何Python扩展系统实现这一点的稀疏信息。

我希望在尝试包装C ++代码时为重复出现的问题创建一个良好的起点。

0 个答案:

没有答案