Cython如何处理c++包装中的双指针



我有一个带有这个签名的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++代码。

我卡住了。谢谢!

首先,intbool通常不是相同的大小,所以将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)

最新更新