Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre chevronné
    Inscrit en
    juillet 2002
    Messages
    842
    Détails du profil
    Informations forums :
    Inscription : juillet 2002
    Messages : 842
    Points : 648
    Points
    648

    Par défaut boost.python : générer les conversions to_python pour des classes abstraites

    Bonjour,

    Je tente de générer des wrapppers pour une librairie qui n'expose essentiellement que des classes abstraites dans ses headers. Je souhaite également embarquer Python et exposer des objets instances de classes dérivées de ces classes abstraites. J'ai donc besoin d'une fonction de conversion de C++ vers Python pour ces classes abstraites.

    Manque de bol, les classes abstraites doivent, d'après le manuel, être qualifées avec un attribut non_copyable. Or la définition de cet attribut désactive du même coup la génération des fonctions de conversion. Evidement, il n'est pas possible de copier un objet d'une classe abstraite en utilisant un constructeur par recopier.

    Qu'à cela ne tienne ! On peut demander à boost de ne stoquer qu'un pointeur sur l'objet plutôt qu'une copie, remplaçant alors la nécessité de copie de la valeur par une nécessité de copie du pointeur. Mais pour une raison que j'ignore encore, là encore ça ne fonctionne pas.

    Code :
    class_<A, A*>("A", no_init)...
    produira toujours l'erreur :

    error: cannot allocate an object of abstract type A
    dans un sombre développement imbriqué de templates et macros obscurs.

    Existe t-il un moyen d'exposer une classe virtuelle ET des objets de cette classe ?

  2. #2
    Membre Expert
    Avatar de fred1599
    Homme Profil pro Fred
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 805
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 805
    Points : 2 445
    Points
    2 445

    Par défaut

    j'y connais rien sur boost python, mais j'ai vu ça dans la doc
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre chevronné
    Inscrit en
    juillet 2002
    Messages
    842
    Détails du profil
    Informations forums :
    Inscription : juillet 2002
    Messages : 842
    Points : 648
    Points
    648

    Par défaut

    Après un petit passage sur la mailing list de python, j'ai pu comprendre :

    1. Que les objets python sont liés aux objets c++ toujours par référence à moins qu'il n'ait été créé en python, ainsi il n'est pas nécessaire de modifier le Held Type.
    2. Que l'argument noncopyable annule uniquement l'enregistrement de convertisseurs de valeur, mais pas ceux des convertisseurs de pointeur/référence.
    3. Qu'il faut effectivement importer le module enregistré pour enregistrer ces convertisseurs automatiquement générés.


    Une fois que tout est fait correctement, ça fonctionne sans soucis.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •