Используя Boost :: Python, нормальный механизм для переноса функций работает корректно с функциями C ++, возвращающими void
. К сожалению, обычный механизм также имеет ограничения, особенно в отношении функции, которую он поддерживает. Поэтому мне нужно использовать boost :: python :: raw_function, чтобы обернуть мою функцию, но она не компилируется, когда моя функция возвращает void
. Вот простой тестовый пример:
#include <boost/python.hpp>
#include <boost/python/raw_function.hpp>
void entry_point(boost::python::tuple args, boost::python::dict kwargs) { }
BOOST_PYTHON_MODULE(module)
{
boost::python::def("entry_point", boost::python::raw_function(&entry_point));
}
Что выдает ошибку:
/ usr / local / include / boost / python / raw_function.hpp: в функции-члене 'PyObject * boost :: python :: detail :: raw_dispatcher :: operator () (PyObject *, PyObject *) [с F = void (*) (boost :: python :: tuple, boost :: python :: dict)] ':
/ usr / local / include / boost / python / object / py_function.hpp: 94: создается из 'PyObject * boost :: python :: objects :: full_py_function_impl :: operator () (PyObject *, PyObject *) [ с Caller = boost :: python :: detail :: raw_dispatcher, Sig = boost :: mpl :: vector1] '
void.cpp: 8: создается здесь
/ usr / local / include / boost / python / raw_function.hpp: 36: ошибка: недопустимое использование пустого выражения
На данный момент я могу обойти это, заставив мою функцию возвращать фиктивное значение, но это несколько неудовлетворительно. Другие люди сталкивались с этой проблемой?