2010-03-29 13 views
12

Machen habe ich diese sehr einfache C++ Klasse:einen Zeiger in Boost.Python

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

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

} 

ich den Kopf Variable aus Python zugreifen möchten, aber die Botschaft, die ich sehe, ist:

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

Aus was ich verstehe, geschieht, weil Python ausflippt, weil es kein Konzept von Zeigern hat. Wie kann ich auf die Kopfvariable von Python zugreifen?

Ich verstehe, ich sollte Kapselung verwenden, aber ich bin derzeit mit dem Bedürfnis nach einer Nicht-Kapselung Lösung fest.

Antwort

20

Natürlich finde ich die Antwort zehn Minuten nach der Frage zu stellen ... hier ist, wie es gemacht wird:

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

das nicht richtig klingen. Höchstwahrscheinlich möchten Sie 'return_internal_reference'. – elmo