2010-04-26 31 views
5

ho una classe C++, che ha i seguenti metodi:boost :: python proprietà di stringa convertibile

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

dove la classe Foo è convertibile in std::string (ha un costruttore implicita da std::string ed un operatore std::string getto).

mi definiscono una classe wrapper Boost.Python, che, tra le altre cose, definisce una proprietà sulla base di precedenti due funzioni:

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

ho marchio anche la classe come convertibile da/per std::string.

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

Ma in fase di esecuzione ho ancora un errore di conversione tentativo di accedere a questa proprietà:

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

Come ottenere la conversione senza troppo boilerplate delle funzioni wrapper? (Ho già tutte le funzioni di conversione in classe Foo, quindi la duplicazione è indesiderabile.

risposta

Problemi correlati