Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Interfaçage autre langage
Interfaçage autre langage Forum d'entraide pour l'interfaçage avec d'autres langages (ctypes, api C, swig, ...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 30/07/2011, 00h45   #1
Blustuff
Membre chevronné
 
Inscription : juillet 2002
Messages : 842
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 842
Points : 647
Points : 647
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 :

Citation:
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 ?
Blustuff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2011, 23h24   #2
fred1599
Membre Expert
 
Avatar de fred1599
 
Homme Fred
Enseignant
Inscription : juillet 2006
Messages : 1 321
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 321
Points : 1 819
Points : 1 819
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)
fred1599 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 11h08   #3
Blustuff
Membre chevronné
 
Inscription : juillet 2002
Messages : 842
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 842
Points : 647
Points : 647
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.
Blustuff est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h46.


 
 
 
 
Partenaires

Hébergement Web