1

我正在尝试包装一些 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++ 代码时反复出现的问题创建一个良好的起点。

4

0 回答 0