我在C++中实现了<强>< <强> Python缓冲区接口:
https://docs.python.org/2/c-api/buffer.html
我实现了Py_buffer struct并将其填充:
template<typename T>
static int getbuffer(PyObject *obj, Py_buffer *view, int flags)
{
flags;
static const Py_ssize_t suboffsets[1] = { 0};
view->buf = (void*)(_Cast<T>(obj)->getbuffer());
view->obj = NULL;
view->len = _Cast<T>(obj)->getbuffersize();
view->itemsize = 1;
view->readonly = _Cast<T>(obj)->getreadonly();
view->ndim = 0;
view->format = NULL;
view->shape = NULL;
view->strides = NULL;
view->suboffsets = NULL;
view->internal = NULL;
return 0;
}
我在Python中创建了Python缓冲类并将其交给C++。我得到了一个pyObject和Py_缓冲区。现在我的问题是,我应该如何在C++中编写和调整这个PyBuffe?我可以直接访问指针和大小。但是如果它是一个新创建的缓冲区,我如何告诉它我需要多少空间?似乎没有任何调整大小的函数可供我调用。在
我可以使用:int result = PyBuffer_FromContiguous(&m_view, const_cast<void*>(data), pySize, 'A');
将数据添加到我的缓冲区。但我的缓冲区必须已经有正确的大小,否则它不会写。我不认为这是使用它的正确方法。在
赛顿不是一个选择。在
{{1>不应该直接调整接口的大小。在
相反,在底层
PyObject
上使用PyByteArray_Resize()
(或者可能是_PyString_Resize()
)。在相关问题 更多 >
编程相关推荐