Boost:python将指针指向指针作为参数传递
boost:python passing an pointer to pointer as parameter
首先,我不是python程序员,所以请原谅我的愚蠢错误。
在c++中,我从MyClass中获得了这个公共方法,它可以动态地创建一个图像并返回它的大小。
int MyClass::getImg(uchar *uimg[])
{
int size = variable_size;
*_uimg = new uchar[size];
memcpy(*_uimg, imageOrigin->data(), size);
uimg = _uimg;
return size;
}
和boost:python:
BOOST_PYTHON_MODULE(mymodule)
{
class_<MyClass>("MyClass")
.def("getImg", &MyClass::getImg)
;
}
,当我尝试在python中使用它时:
def getImg():
img = c_char_p()
size = mymodule.MyClass.getImg(byref(img))
我得到这个错误:
Boost.Python.ArgumentError: Python argument types in
MyClass.getImg(MyClass, CArgObject, CArgObject)
did not match C++ signature:
getImg(class MyClass {lvalue}, unsigned char * *)
在python中我也尝试过声明
img = POINTER(c_ubyte)()
但这也没有帮助。
我在谷歌上搜索了几个小时,但没有找到任何好的解决方案。
我只需要在python中访问那个图像,我怎么才能做到这一点?
修改后的工作版本,将数据公开为python列表。
我不确定如何实现这个,但是如果你可以自由选择你的python接口,可能会有更好的实现方式。我认为创建一个列表可能是一个更好的暴露它的方式。您期望从返回值中得到什么?也许你也可以把它包装成一个numpy数组以获得更好的性能(如果你搜索boost python和numphy,也有一些关于stackoverflow的问题)
class TestPtr
{
public:
int getImg(uchar **uimg)
{
int size = 9045;
uchar *_uimg = new uchar[size];
for( int i = 0; i < size; ++i )
_uimg[i] = i;
*uimg = _uimg;
return size;
}
};
boost::python::list getImgList( TestPtr &p )
{
uchar *uimg;
int rv = p.getImg(&uimg);
boost::python::list l;
for ( int i = 0; i < rv; ++i)
l.append( uimg[i] );
return l;
}
BOOST_PYTHON_MODULE(mymodule)
{
class_<TestPtr>("TestPtr")
.def("getImg",&getImgList)
;
}
另一个提示,在您的问题中,您使用了以下行来调用该方法:
mymodule.MyClass.getImg()
这将对您的对象进行类调用(或多或少相当于静态调用)。这是一种更正确的方法:
img = mymodule.MyClass()
data = img.getImg()
相关文章:
- 使用指向成员的指针将成员函数作为参数传递
- 修改函数中的指针(将另一个指针作为参数传递)
- 将成员函数指针作为参数传递给模板方法
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 将函数指针数组中的函数指针作为模板参数传递
- 为什么或在什么情况下,你会将参数作为C++中的引用(或指针)传递给函数?
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 如何将指针变量作为引用参数传递?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- Qt5 - 如何将"QList<T> *"指针作为信号参数传递,并在完成后将其删除?
- C++将指向成员的指针作为模板参数传递
- 通过引用函数传递指针参数是什么意思?
- C++ 将派生类的成员函数指针作为参数传递时选择了错误的模板专用化
- 将函数指针作为函数参数传递的目的
- 将派生类作为参数传递给方法,该方法是具有智能指针的基类
- 将指针参数传递给双指针参数
- 解析结构并作为指针参数传递
- Qt中的2D游戏:初始化怪物并将动态分配的数组作为指针参数传递