2010-03-29 11 views
12

tengo esta muy simple clase C++:La exposición de un puntero en Boost.Python

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

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

} 

quiero acceder a la variable de cabeza desde Python, pero el mensaje que veo es:

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

De lo que entiendo, esto sucede porque Python está enloqueciendo porque no tiene ningún concepto de punteros. ¿Cómo puedo acceder a la variable principal desde Python?

Entiendo que debería usar encapsulación, pero actualmente estoy atascado con la necesidad de una solución sin encapsulamiento.

Respuesta

20

Por supuesto, encontrar la respuesta diez minutos después de hacer la pregunta ... así es como se hace:

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

que no suena correcto. Lo más probable es que quieras 'return_internal_reference'. – elmo

Cuestiones relacionadas