Исправление samson, (текущая версия) :
UPD:
Что нужно указать в .def(init<>) вместо std::function<bool()>?
Модуль собирается, но не передается указатель на функцию из python в C++.
class eventPython : public eventBase {
public:
eventPython(std::function<bool()>);
private:
std::function<bool()> evFunc;
virtual bool run() override;
};
BOOST_PYTHON_MODULE(modulename) {
class_<eventPython>("qcEv")
/* ??? какой тут нужно указать тип вместо std::function<bool()> ??? */
.def( init<std::function<bool()>>(args("eventFunc")) );
}
вполняем скрипт:
from modulename import qcEv
def pyFunc():
print('python: pyFunc()')
return True
e = qcEv(pyFunc)
Результат:
$ python test.py
Traceback (most recent call last):
File "test.py", line 14, in <module>
e = qcEv(pyFunc)
Boost.Python.ArgumentError: Python argument types in
qcEv.__init__(qcEv, function)
did not match C++ signature:
__init__(_object*, std::function<bool ()> eventFunc)
__init__(_object*)
В предыдущем примере, обратно к std::function<> преобразуется:
std::function<bool()> fptr2(d["pyFunc"]);
Исходная версия samson, :
UPD:
Что нужно указать в .def(init<>) вместо std::function<bool()>?
Модуль собирается, но не передается указатель на функцию из python в C++.
class eventPython : public eventBase {
public:
eventPython(std::function<bool()>);
private:
std::function<bool()> evFunc;
virtual bool run() override;
};
BOOST_PYTHON_MODULE(modulename) {
class_<eventPython>("qcEv")
/* ??? какой тут нужно указать тип вместо std::function<bool()> ??? */
.def( init<std::function<bool()>>(args("eventFunc")) );
}
вполняем скрипт:
from modulename import qcEv
def pyFunc():
print('python: pyFunc()')
return True
e = qcEv(pyFunc)
Результат:
$ python test.py
Traceback (most recent call last):
File "test.py", line 14, in <module>
e = qcEv(pyFunc)
Boost.Python.ArgumentError: Python argument types in
qcEv.__init__(qcEv, function)
did not match C++ signature:
__init__(_object*, std::function<bool ()> eventFunc)
__init__(_object*)