2016-11-04 61 views
1

处理在C++包装双指针有一个C++与此签名对象,我如何通过用Cython

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++代码中。

我被卡住了。谢谢!

回答

2

首先,intbool一般不会有相同的尺寸,因此它可能是危险的的int秒的数组传递给需要的bool秒的数组的函数。

我建议你改变你的Cython代码以匹配C++签名。您可以访问C++ bool地用Cython与

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) 
+0

在这行'cdef b_ptr =&b [0]#地址的第一个元素',我得到'不能将'bool *'转换为Python对象。 – reckoner

+0

我的错误!我希望修复它。我用一个稍微简单的例子对自己进行了测试,然后将其复制到您的示例中。 – DavidW

+0

谢谢!这就是它。 – reckoner