pybind11:如何使用上下文管理器实现

时间:2019-01-03 15:27:59

标签: python c++ with-statement pybind11

我正在尝试使用带有pybind11的上下文管理器来实现Python。

Python's documentation之后,我的第一个版本是:

    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_typeexc_valuetraceback的类型。我猜他们可以很简单pybind11::object吗?

我可以使用更具体的绑定吗?

1 个答案:

答案 0 :(得分:0)

实际上,这些参数将作为Python对象出现,因此应为它们使用pybind11::object类型。使用void*不是解决方案。

Pybind11可能是目前使用C ++作为其语言的C ++机制的最佳Python包装器。