2016-11-04 64 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