J'essaie de comprendre ce qui ne va pas avec du code boost :: python autogénéré (avec Pyste), mais je n'ai pas de chance jusqu'à maintenant.Boost :: Liaisons Python pour les classes avec héritage
Il y a bibliothèque C++, Magick ++, qui fournit deux classes, Magick::Drawable
et 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
{ ... }
sont utilisés comme arguments pour 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_);
I J'essaie de faire des liaisons python pour cela, il y a auto emballages genned pour toutes les classes,
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
Le problème est, en raison de la classe indirecte des moulages de DrawableBase à Drawable, ces emballages ne fonctionnent pas:
>>> 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())
>>>
Y at-il une meilleure façon de gérer cela que d'écrire mon propre wrapper draw() en C + +, qui jetterait PyObject en Drawable?
Ceci devrait être étiqueté avec 'pyste' ainsi que 'boost-python'. –
@Matthew, pyste a été utilisé auparavant pour le code autogen, mais il est abandonné maintenant, et le code est supporté. –