我正在尝试使用带有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_type
,exc_value
和traceback
的类型。我猜他们可以很简单pybind11::object
吗?
我可以使用更具体的绑定吗?
答案 0 :(得分:0)
实际上,这些参数将作为Python对象出现,因此应为它们使用pybind11::object
类型。使用void*
不是解决方案。
Pybind11可能是目前使用C ++作为其语言的C ++机制的最佳Python包装器。