pybind11: как реализовать менеджер контекста - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь реализовать Python с менеджером контекста с pybind11.

После документации Python , моя первая версия:

    py::class_<MyResource> (module, "CustomResource", "A custom ressource")
    .def("__enter__", [&] (MyResource& r) { r.lock(); }
        , "Enter the runtime context related to this object")
    .def("__exit__", [&] (MyResource& r, void* exc_type, void* exc_value, void* traceback) { r.unlock(); }
        , "Exit the runtime context related to this object")
    ;

Я не знаю, что такое типы exc_type, exc_value и traceback. Я думаю, они могут быть простыми pybind11::object?

Могу ли я использовать более конкретные привязки?

1 Ответ

0 голосов
/ 03 января 2019

Действительно, эти аргументы будут представлены как объекты Python, поэтому вы должны использовать для них тип pybind11::object. Использование void* не является решением.

Pybind11, вероятно, лучшая оболочка Python для механизма C ++, которая на данный момент использует C ++ в качестве языка.

...