Я новичок в программировании, я определил функцию в c ++ с методом кортежа для двух возвращаемых переменных, после того как я скомпилировал файлы, В файле python я пытаюсь получить доступ к двум возвращенным переменным внутри динамической библиотеки, которая была скомпилирована , но это не работает, произошла ошибка сегментации, когда я пытался запустить программу python. Но на самом деле я успешно использую одну возвращаемую переменную из c ++, я думаю, что может быть особая хитрость для доступа к двум возвращаемым переменным с помощью метода кортежа из python.
Ниже приведен код C ++ с двумя возвращаемыми переменными с методом кортежа
std::tuple<double, double> Cassie2d::Step(ControllerTorque* action)
{
dyn_model_.setState(mj_data_->qpos, mj_data_->qvel);
dyn_state_.UpdateDynamicState(&dyn_model_);
mju_copy(mj_data_->ctrl, action->torques, nU);
mj_step(mj_model_, mj_data_);
return std::make_tuple(mj_data_->qacc,mj_data_->time);
Render();
}
Ниже приведен метод python, который я применил, поскольку обе возвращаемые переменные имеют тип double.
lib.StepTorque.argtypes = [ctypes.c_void_p, ctypes.POINTER(ControllerTorque)]
lib.StepTorque.restype = ctypes.c_double
Я предполагаю, что restype
не просто равен ctypes.c_double
, потому что он работал для одной возвращаемой переменной и может не работать для двух возвращаемых переменных.
Очень ценю за помощь!