2010-03-29 23 views
12

Tôi có rất đơn giản C++ lớp này:Phơi bày một con trỏ trong Boost.Python

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

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

} 

tôi muốn truy cập các biến đầu từ Python, nhưng thông điệp mà tôi thấy là:

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

Từ những gì tôi hiểu, điều này xảy ra bởi vì Python là freaking ra bởi vì nó không có khái niệm về con trỏ. Làm thế nào tôi có thể truy cập biến đầu từ Python?

Tôi hiểu rằng tôi nên sử dụng đóng gói, nhưng hiện tại tôi đang mắc kẹt với việc cần một giải pháp không đóng gói.

Trả lời

20

Tất nhiên, tôi tìm ra câu trả lời mười phút sau khi đặt ra câu hỏi ... đây là cách nó được thực hiện:

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

Điều đó không có âm thanh chính xác. Có lẽ bạn muốn 'return_internal_reference'. – elmo

Các vấn đề liên quan