From d6902e7a60955bbbfd6c902ec923ac4d723319f8 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Mon, 31 Dec 2018 02:26:07 +0100 Subject: [PATCH] python: fix register_function when passed a class --- src/bindings/python/simgrid_python.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/bindings/python/simgrid_python.cpp b/src/bindings/python/simgrid_python.cpp index a9f013559b..28300bc25c 100644 --- a/src/bindings/python/simgrid_python.cpp +++ b/src/bindings/python/simgrid_python.cpp @@ -80,10 +80,25 @@ PYBIND11_MODULE(simgrid, m) .def("load_deployment", &Engine::load_deployment, "Load a deployment file and launch the actors that it contains, see :cpp:func:`simgrid::s4u::Engine::load_deployment()`") .def("run", &Engine::run, "Run the simulation") - .def("register_function", [](Engine*, std::string name, std::function)> f) { + .def("register_function", [](Engine*, std::string name, py::object obj) { simgrid::simix::register_function(name, - [f](std::vector args) -> simgrid::simix::ActorCode { - return [args, f]() { f(args); }; + [obj](std::vector args) -> simgrid::simix::ActorCode { + return [obj, args]() { + /* Convert the std::vector into a py::tuple */ + py::tuple params(args.size()-1); + for (size_t i=1; i(pybind11::handle(static_cast(result))); + obj2(); + } + }; }); }, "Registers the main function of an actor, see :cpp:func:`simgrid::s4u::Engine::register_function()`") ; -- 2.20.1