代码如下:
c++ lib
//.h
static complex<double>* randomComplexArray(long n);
//.cpp
complex<double>* randomComplexArray(long n){
complex<double>* res = new complex<double>[n];
...
return res; //返回的指针
}
pybuind11
.def_static("randomCircleArray", &randomCircleArray)
python
mvec1 = randomComplexArray(1024)
foo(mvec1)
# Segmentation fault (core dumped)
如果是一般类型可以用 ctypes,但是没找到合适的解决方案,
想问下有经验的朋友知道怎么做吗?十分感谢~
1
inframe 2019 年 9 月 22 日 2 个可选策略
- 转字符串传回来,反正 py 转换很方便 - 拆成实部虚部两部分传回来,这样套路就多了,比如转换为 python 的 tuple,list 等等,反正是 py 的可以识别的对象,需要多写一个类型转换函数解包结果封装一下 |
3
wwqgtxx 2019 年 9 月 22 日 via iPhone 我的做法是用纯 c 封装个包装函数,参数传递 void*然后强制类型转换到 c++层操作
|
5
wwqgtxx 2019 年 9 月 22 日
@Huelse pybind11 我不太了解,用 ctypes 的话用 c_void_p,用 cffi 的话直接 cdef 一个 void*然后把接受到指针传回给 C 函数
|
6
zhoujinjing09 2019 年 10 月 22 日
用 py::cast 把 res 转成 py::object?
|