2010-04-26 6 views
5

J'ai une classe C++, qui a les méthodes suivantes:boost :: python propriétés convertibles chaîne

class Bar { 
... 
    const Foo& getFoo() const; 
    void setFoo(const Foo&); 
}; 

où la classe Foo est convertible en std::string (il a un constructeur implicite de std::string et un opérateur coulé std::string).

Je définit une classe wrapper Boost.Python, qui, entre autres, définit une propriété en fonction de deux fonctions précédentes:

class_<Bar>("Bar") 
    ... 
    .add_property(
     "foo", 
     make_function(
      &Bar::getFoo, 
      return_value_policy<return_by_value>()), 
     &Bar::setFoo) 
    ... 

Je marque aussi la classe convertible/de std::string.

implicitly_convertible<std::string, Foo>(); 
implicitly_convertible<Foo, std::string>(); 

Mais lors de l'exécution, je reçois encore une erreur de conversion en essayant d'accéder à cette propriété:

TypeError: No to_python (by-value) converter found for C++ type: Foo 

Comment réaliser la conversion sans trop de boilerplate fonctions wrapper? (Je l'ai déjà toutes les fonctions de conversion en classe Foo, donc double emploi est indésirable.

Répondre