【发布时间】:2020-01-19 06:19:40
【问题描述】:
我使用 pybind11 创建了以下类:
py::class_<Raster>(m, "Raster")
.def(py::init<double*, std::size_t, std::size_t, std::size_t, double, double, double>());
但是我不知道如何在 Python 中调用这个构造函数。我看到 Python 需要一个浮点数来代替 double*,但我似乎无法调用它。
我试过了,ctypes.data_as(ctypes.POINTER(ctypes.c_double)) 但这不起作用...
编辑:
我从@Sergei 的答案中提炼了答案。
py::class_<Raster>(m, "Raster", py::buffer_protocol())
.def("__init__", [](Raster& raster, py::array_t<double> buffer, double spacingX, double spacingY, double spacingZ) {
py::buffer_info info = buffer.request();
new (&raster) Raster3D(static_cast<double*>(info.ptr), info.shape[0], info.shape[1], info.shape[2], spacingX, spacingY, spacingZ);
})
【问题讨论】: