boost::python::call_method
состоит из нескольких перегруженных функций, которые принимают различное количество аргументов, определенных следующим образом:
template <class R>
R call_method(PyObject* self, char const* method);
template <class R, class A1>
R call_method(PyObject* self, char const* method, A1 const&);
template <class R, class A1, class A2>
R call_method(PyObject* self, char const* method, A1 const&, A2 const&);
...
Когда вы вызываете его напрямую (например, call_method<void>(self, name, arg1, arg2)
), компилятор может выбрать правильныйПерегрузка и шаблонные типы аргументов автоматически.Но когда вы передаете указатель функции на call_method
в bind
, вам нужно вручную указать типы перегрузки и аргументов, используя:
call_method<ReturnType, Arg1Type, Arg2Type, ...>
Или в этом случае:
call_method<void, boost::shared_ptr<Event> >