假设我定义了一个像这样的类:
cdef class A:
cdef int a
def __cinit__(self):
self.a = 0
现在我想在不同的类中包含A
数组:
cdef class B:
cdef A* b
def __cinit__(self, SIZE_t n):
self.b = <A*>realloc(self.p[0], sizeof(A)*n)
但是我得到了错误:
Pointer base type cannot be a Python object
编辑:我意识到我并没有明确说明我正在尝试设置A
的动态长度数组,realloc
在某些时候,这就是为什么我有一个指向该类型的指针。
编辑2:我的基本要求是:
我知道指针可能不是最好的方法,如果有更好的解决方案,我很高兴。这就是为什么我要说它不是this question的副本。我已经读过一个,它不能回答这个问题。
有关更多背景信息,这是我在此scikit-learn/PR/commit中介绍的BitSet
。
编辑3:对于一维数组,我也许可以使用memoryview
,例如:
...
cdef A[:] b
...
for i in range(n):
b[i] = A()
但是我不确定如何处理长度可变的二维。我只是希望我可以使用类似vector<vector<A>>
的东西。