Можно ли сохранить необработанные данные, соответствующие классу Pybind11 - PullRequest
0 голосов
/ 01 августа 2020

Я хотел бы иметь возможность сохранять необработанный массив байтов, содержащий данные, соответствующие (упакованному) классу C ++, предоставленному Pybind11. Это возможно? Это действительно поможет при модульном тестировании некоторого кода C ++. Было бы неплохо сделать и обратное, но это не критично.

1 Ответ

0 голосов
/ 17 августа 2020

Я придумал, как это сделать. Я добавил функцию шаблона в оболочку pybind, которая возвращает массив байтов numpy:

// Convert the object contents to a numpy byte array
template <class T> 
c_pyarray GetBytes(T& params) {  
  auto size = sizeof(T);
  auto output = py::array_t<uint8_t>(size);
  uint8_t* obase_ptr = reinterpret_cast<uint8_t*>(output.request().ptr);
  uint8_t* thisPtr = (uint8_t*)&params;
  copy(thisPtr, thisPtr + size, obase_ptr);
  return output;
}
...