gpt4 book ai didi

c++ - Boost::Python 绑定(bind)类继承

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:22 25 4
gpt4 key购买 nike

我试图弄清楚一些自动生成的(使用 Pyste)boost::python 代码有什么问题,但到目前为止还没有运气。

有一个C++库Magick++,它提供了两个类,Magick::DrawableMagick::DrawableRectangle:

https://www.imagemagick.org/subversion/ImageMagick/trunk/Magick++/lib/Magick++/Drawable.h

class MagickDLLDecl DrawableBase:
public std::unary_function<MagickCore::DrawingWand,void>
{...}
class MagickDLLDecl Drawable
{
public:
// Constructor
Drawable ( void );
// Construct from DrawableBase
Drawable ( const DrawableBase& original_ );
...
}
class MagickDLLDecl DrawableRectangle : public DrawableBase
{ ... }

这些用作 Image.draw() 的参数: https://www.imagemagick.org/subversion/ImageMagick/trunk/Magick++/lib/Magick++/Image.h

// Draw on image using a single drawable
void draw ( const Drawable &drawable_ );
// Draw on image using a drawable list
void draw ( const std::list<Magick::Drawable> &drawable_ );

我正在尝试为它创建 python 绑定(bind),所有类都有自动生成的包装器,

http://bitbucket.org/dan.kluev/pythonmagick/src/65d45c998ef3/src/_Drawable.cpp

http://bitbucket.org/dan.kluev/pythonmagick/src/65d45c998ef3/src/_DrawableRectangle.cpp

http://bitbucket.org/dan.kluev/pythonmagick/src/65d45c998ef3/src/_Image.cpp

问题是,由于从 DrawableBase 到 Drawable 的间接类转换,这些包装器不起作用:

>>> import PythonMagick
>>> image = PythonMagick.Image()
>>> square = PythonMagick._PythonMagick.DrawableRectangle(0,0,200,200)
>>> image.draw(square)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Boost.Python.ArgumentError: Python argument types in
Image.draw(Image, DrawableRectangle)
did not match C++ signature:
draw(Magick::Image {lvalue}, std::list<Magick::Drawable, std::allocator<Magick::Drawable> >)
draw(Magick::Image {lvalue}, Magick::Drawable)
# But abstract Drawable() does work:
>>> image.draw(PythonMagick._PythonMagick.Drawable())
>>>

有没有比用 C++ 编写我自己的 draw() 包装器更好的方法来处理这个问题,它将 PyObject 转换为 Drawable?

最佳答案

如果您希望 BP 为您隐式转换对象,您必须告诉 BP 它们是可隐式转换的。把这样的东西放在你的 bp::code:

boost::python::implicitly_convertible<SourceType,DestType>();

我不知道如何诱导 Pyste 这样做。

关于c++ - Boost::Python 绑定(bind)类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4332398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com