Cython如何处理c++包装中的双指针
How to handle double pointer in C++ wrapping by Cython
我有一个带有这个签名的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)
相关文章:
- C结构,其指针将被包装在unique_ptr中
- 如何将 c++ 类包装到 python 中,以便我可以使用 pybind11 访问其成员的公共方法(成员是一个对象指针)
- 如何包装多级原始指针以赋予其容器语义
- SDL 包装标头中的智能指针
- 将捕获的 lambda 包装为模板函数中的函数指针
- 智能指针包装CoTaskMemAlloc和CoTaskMemFree
- 包装 C API 通过C++接受迭代器的函数获取原始指针
- std::带有指向成员函数和back_inserter的指针的转换包装器
- 如何使用指针作为参数在 C# 中包装C++ DLL?
- 重置/包装 C/C++ 中的变量(环缓冲区指针)
- 使用可变参数模板(gcc、clang)的成员函数指针包装器
- Qvariant包装指针在QML中变为null
- C 11 / 14-是否有针对其他地方管理的资源的原始指针包装器
- 编写安全包装类以管理用户定义对象的指针
- 用Cython包装C 类时处理指针
- 为什么编译器不优化琐碎的包装器函数指针?
- 简单包装类与智能指针
- 字符指针包装器的运算符>>
- 通过简单的包装指针C++智能指针性能和差异
- 如何使用右值引用包装指针