我有一个带有这个签名的c++对象,
Foo(const bool* const*, const int, const float=0.025);
我有相应的一个PYX文件
import numpy as np
cimport numpy as np
cdef extern from "foo.h":
cdef cppclass Foo:
Foo()
Foo(int**, const int, const float=0.025)
void mcq(int* &maxclique, int &sz)
cdef class MyFoo:
cdef Foo c_mxclik
def __cinit__(self, int[:] b, int k, float x):
self.c_mxclik = Foo(b,k,x)
不起作用。我不明白如何通过Cython将Python输入的const bool* const*
部分转换为c++代码。
我卡住了。谢谢!
首先,int
和bool
通常不是相同的大小,所以将int
s数组传递给期望bool
s数组的函数可能是危险的。
我建议你修改你的Cython代码来匹配c++签名。你可以通过
在Cython中访问c++bool
from libcpp cimport bool
第二,您只需要使用c风格的&
操作符获取地址。您需要分两步完成(即首先设置bool*
,然后获取其地址)。
def __cinit__(self, bool[:] b, int k, float x):
cdef bool* b_ptr = &b[0] # address of first element
self.c_mxclik = Foo(&b_ptr,k,x)