Предоставление указателя в Boost.Python - PullRequest
11 голосов
/ 30 марта 2010

У меня есть очень простой класс C ++:

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

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

}

Я хочу получить доступ к переменной head из Python, но я вижу следующее сообщение:

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

Из того, что я понимаю, это происходит потому, что Python бесится, потому что у него нет понятия указателей. Как я могу получить доступ к переменной head из Python?

Я понимаю, что должен использовать инкапсуляцию, но в настоящее время я застрял в необходимости решения без инкапсуляции.

1 Ответ

19 голосов
/ 30 марта 2010

Конечно, я нахожу ответ через десять минут после того, как задаю вопрос ... вот как это делается:

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>()))
;
...