Я не уверен, что Boost.Python реализует оператор разыменования **
, как заявлено, но вы все равно можете использовать Python C-API для выполнения метода, в который вы ввели, , как описано здесь .
Вот прототип решения:
//I'm starting from where you should change
boost::python::object callable = module.attr("func");
//Build your keyword argument dictionary using boost.python
boost::python::dict kw;
kw["x"] = 1;
kw["y"] = 3.14;
kw["z"] = "hello, world!";
//Note: This will return a **new** reference
PyObject* c_retval = PyObject_Call(callable.ptr(), NULL, kw.ptr());
//Converts a new (C) reference to a formal boost::python::object
boost::python::object retval(boost::python::handle<>(c_retval));
После того, как вы преобразовали возвращаемое значение из PyObject_Call
в формальное boost::python::object
, вы можете либо вернуть его из своей функции, либо просто забыть, и новая ссылка, возвращаемая PyObject_Call
, будет автоматически удалена.
Для получения дополнительной информации о переносе PyObject*
в boost::python::object
ознакомьтесь с руководством Boost.Python. Точнее, по этой ссылке, конец страницы .