Closed
Description
I want to assign a class, exposed to Python through pybind11, to a module's attribute. This requires converting it to an object
. To make things concrete, I want to use RAII pattern to initialize and finalize MPI whenever the module is imported. The code looks roughly like this:
struct environment
{
environment() { MPI_Init(0,0); }
~environment() { MPI_Finalize(); }
};
py::class_<environment>(m, "environment")
.def("__repr__", [](const environment&) { return "MPI Environment"; });
m.attr("env") = py::detail::type_caster<environment>::cast(new environment, py::return_value_policy::automatic, m.ptr());
This works, but it's the last line that bothers me. Is this really the right way to do this? Have I missed some cleaner way? Besides being verbose, having to access detail
namespace seems wrong. I'm probably missing something, but if not, maybe it's worth adding clean support for this use-case?
Metadata
Metadata
Assignees
Labels
No labels