Ich versuche herauszufinden, was falsch mit einigen selbstgenerierten (mit Pyste) Boost :: Python-Code ist, aber bisher kein Glück haben.Boost :: Python-Bindings für Klassen mit Vererbung
Es ist C++ Bibliothek, Magick ++, die zwei Klassen bietet, Magick::Drawable
und Magick::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
{ ... }
Diese werden als Argumente für Image.draw()
verwendet: 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_);
I Ich versuche Python Bindings dafür zu machen, da sind automatisch genned Wrapper für alle Klassen,
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
Problem ist, aufgrund indirekter Klasse wirft von DrawableBase zu Drawable, diese Wrapper nicht funktionieren:
>>> 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())
>>>
Gibt es eine bessere Möglichkeit, dies zu handhaben, als meinen eigenen draw() -Wrapper in C + zu schreiben +, die PyObject in Drawable umwandeln würde?
Dies sollte mit 'pyste' sowie 'boost-python' getaggt werden. –
@Matthew, pyste wurde zuvor für Autogen-Code verwendet, wird aber jetzt gelöscht, und Code wird ohne es unterstützt. –