能否保存一个Pybind11对应的原始数据class

Can one save raw data corresponding to a Pybind11 class

我希望能够保存原始字节数组,其中包含与 Pybind11 公开的(打包的)C++ class 相匹配的数据。这可能吗?它确实有助于对某些 C++ 代码进行单元测试。反过来也很好,但这并不重要。

我想出了一个方法来做到这一点。我在 pybind 包装器中添加了一个模板函数,其中 returns 一个 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;
}