La classe PyVersatile derive de la classe Versatile et offre la possibilite de convertir un tel objet en objet Python et vice versa.
class PyVersatile : public Versatile { public: // Constructeur a partir d'un objet Versatile PyVersatile(const Versatile &); // Constructeur a partir d'un PyObject PyVersatile(const PyObject *) throw(TypeMismatchException, ListIsFullException, InvalidArgumentException); // Conversion de type vers un PyObject operator PyObject *() const; // Operateur d'affectation a partir d'un objet Versatile PyVersatile & operator =(const Versatile &); protected: private: };
... // On cree un objet Versatile contenant // une liste de chaine de caracteres Versatile V; V = "a", "b", "c"; // On convertit cet objet Versatile en PyVersatile PyVersatile PyV(V); // De la on produit un objet Python // qui est une liste de chaine de caracteres PyObject * PyO = PyV; ...
Ce constructeur convertit un objet Versatile en objet PyVersatile.
Ce constructeur convertit un objet Python passe en argument en un objet PyVersatile.
Seuls certains objets Python peuvent etre convertis : les string et les long, ainsi que les listes homogenes de ces types, ce qui est coherent avec la nature de l'objet Versatile. Si tel n'est pas le cas, une exception Python est renvoyee a l'interpreteur.
Cet operateur convertit l'objet en objet Python. Selon le cas, l'objet retourne est soit un scalaire soit une liste. L'objet retourne est alloue dynamiquement et doit donc etre pris en charge par l'interpreteur.
L'affectation d'un objet Versatile passe en argument est similaire a l'affectation entre objets Versatile. Les structures de donnees internes initiales de l'objet sont effacees et remplacees par une copie des donnees internes de l'objet passe en argument. Les deux objets restent independants l'un de l'autre a l'issue de l'affectation.