Использование Boost :: Python, нормальный механизм для обертывания функций работает корректно с функциями C++, возвращающими void
. К сожалению, нормальный механизм также имеет ограничения, особенно в отношении функции, которую он поддерживает. Поэтому мне нужно использовать boost :: python :: raw_function для переноса моей функции, но она не компилируется, когда моя функция возвращает void
. Вот простой тест:Boost :: Python raw_function return 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: In member function ‘PyObject* boost::python::detail::raw_dispatcher::operator()(PyObject*, PyObject*) [with F = void (*)(boost::python::tuple, boost::python::dict)]’:
/usr/local/include/boost/python/object/py_function.hpp:94: instantiated from ‘PyObject* boost::python::objects::full_py_function_impl::operator()(PyObject*, PyObject*) [with Caller = boost::python::detail::raw_dispatcher, Sig = boost::mpl::vector1]’
void.cpp:8: instantiated from here
/usr/local/include/boost/python/raw_function.hpp:36: error: invalid use of void expression
На данный момент, я могу обойти эту проблему, имея мою функция возвращает фиктивное значение, но это несколько неудовлетворительно. Попросить других людей столкнуться с этой проблемой?
Вы можете получить вокруг вопросов Arity с обычным методом с помощью # определить ингу BOOST_PYTHON_MAX_ARITY макрос. –
Спасибо, что указали это. Я делаю это сейчас вместо raw_function, он оказывается быстрее на моей машине. –