как конвертировать Python C код API в Boost :: Python? - PullRequest
1 голос
/ 07 марта 2020

Мне нужно вызвать функцию 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,...)

Я очень ценю, что кто-то может помочь мне решить эту проблему.

...