使用 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*) [with 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*) 实例化 [with Caller = boost::python::detail::raw_dispatcher, Sig = boost::mpl::vector1]'</p>
void.cpp:8:从这里实例化
/usr/local/include/boost/python/raw_function.hpp:36:错误:无效使用无效表达式
目前,我可以通过让我的函数返回一个虚拟值来解决这个问题,但这有点不令人满意。其他人遇到过这个问题吗?