2010-03-29 11 views
12

mam to bardzo proste C++ Klasa:Odsłanianie wskaźnik w Boost.Python

class Tree { 
    public: 
     Node *head; 
}; 
BOOST_PYTHON_MODULE(myModule) 
{ 

    class_<Tree>("Tree") 
     .def_readwrite("head",&Tree::head) 
    ; 

} 

Chcę uzyskać dostęp do zmiennej głowy od Pythona, ale widzę to komunikat:

No to_python (by-value) converter found for C++ type: Node* 

Od co rozumiem, dzieje się tak, ponieważ Python jest przerażony, ponieważ nie ma pojęcia wskaźników. Jak uzyskać dostęp do zmiennej head z Python?

Rozumiem, że powinienem używać enkapsulacji, ale obecnie utknąłem w potrzebie rozwiązania bez enkapsulacji.

Odpowiedz

20

Oczywiście, ja znaleźć odpowiedź dziesięć minut po zapytaniu pytanie ... oto jak to zrobić:

class_<Tree>("Tree") 
    .add_property("head", 
    make_getter(&Tree::head, return_value_policy<reference_existing_object>()), 
    make_setter(&Tree::head, return_value_policy<reference_existing_object>())) 
; 
+0

To nie brzmi poprawna. Najprawdopodobniej chcesz 'return_internal_reference'. – elmo