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: エラー: void 式の使用が無効です
今のところ、関数にダミーの値を返させることでこれを回避できますが、それでは少し満足できません。他の人がこの問題に遭遇しましたか?