2010-03-29 5 views
12

ho questo molto semplice classe C++:Esponendo un puntatore in Boost.Python

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

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

} 

voglio accedere alla variabile di testa da Python, ma il messaggio che vedo è:

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

Da quello che capisco, questo accade perché Python sta andando fuori di testa perché non ha alcun concetto di puntatori. Come posso accedere alla variabile head da Python?

Capisco che dovrei usare l'incapsulamento, ma attualmente sono bloccato con la necessità di una soluzione di non incapsulamento.

risposta

20

Naturalmente, trovo la risposta di dieci minuti dopo aver chiesto la questione ... ecco come si fa:

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

Non mi sembra corretto. Molto probabilmente vuoi 'return_internal_reference'. – elmo