Мне нужно вызвать функцию python, как показано ниже:
def f_function(arg1,arg2,...)
#do something
У меня есть код раздела Python C API, как показано ниже, для вызова функции выше в приложении C ++:
PyObject* f_function;//stand for above python function
PyObject* args = NULL;
args= PyTuple_New(num_args);
for (Py_ssize_t i = 0; i < num_args; ++i)
{
//assign value by type
if(TYPE_DOUBLE==type)
{
PyObject* arg = PyFloat_FromDouble(dVal);
PyTuple_SetItem(args, i, arg);
}
else
{
// other type
}
}
// finally call the function
PyObject* pRet = PyObject_CallObject(f_function, args);
if (pRet)
{
long result = PyLong_AsLong(pRet);
cout << "result:" << -1;
}
мой вопрос: у меня есть запрос на использование boost :: python для переписывания вышеуказанного процесса, моя идея такова:
boost::python::object f_function;//same as above python function
boost::python::tuple data;
for (Py_ssize_t i = 0; i < num_args; ++i)
{
//but seems boost python tuple can't insert data as python C API
}
но я не знаю, как передайте ему аргументы, я использую boost :: python :: tuple, который похож на C API, упомянутый выше, но получаю ошибки, я пробовал много раз, кажется, что только вызов формы ниже:
f_function(arg1,arg2,...)
Я очень ценю, что кто-то может помочь мне решить эту проблему.