2010-04-26 10 views
5

Ich habe eine C++ Klasse, die die folgenden Verfahren aufweist:boost :: Python-String-convertible Eigenschaften

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

wo Klasse Foo zu std::string umwandelbar ist (es hat einen impliziten Konstruktor von std::string und einen std::string Umwandlungsoperator).

Ich definiere eine Boost.Python Wrapper-Klasse, die unter anderem eine Eigenschaft auf der Grundlage früheren zwei Funktionen definiert:

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

I markiert auch die Klasse als Cabrio zu/von std::string.

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

aber zur Laufzeit bekomme ich noch einen Konvertierungsfehler versuchen, diese Eigenschaft zuzugreifen:

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

Wie die Umwandlung ohne zu viel Textvorschlag von Wrapper-Funktionen zu erreichen? (Ich habe bereits alle Konvertierungsfunktionen in der Klasse Foo, so Vervielfältigung ist unerwünscht.

Antwort