From: Martin Quinson Date: Mon, 31 Dec 2018 01:26:07 +0000 (+0100) Subject: python: fix register_function when passed a class X-Git-Tag: v3_22~738 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/d6902e7a60955bbbfd6c902ec923ac4d723319f8 python: fix register_function when passed a class --- 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()`") ;