如何安全地序列化std :: basic_istream <char> :: pos_type?

时间:2016-12-21 08:09:14

标签: c++ linux file-io stl char-traits

在我的一个项目中,我必须缓存有关在大文件中找到的某些数据块的位置信息。我已经实现了一个围绕地图std::basic_istream<char>::pos_type构建的小型API。

现在我需要将这些描述符序列化为字节流并将它们写在磁盘上以供进一步使用(在其他* nix-machines上也是如此)。我已经读过这种类型依赖于平台,但仍然是POD类型。所以我的问题是:

  • 除了抵消之外还能保存更好的东西吗?例如。 std::fpos<std::mbstate_t>保持阅读结构的状态?
  • 如何安全地从std::basic_istream<char>::pos_type获取和恢复偏移数据(如果需要,还可以提供其他信息)?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

std::fpos<mbstate_t>的结构未指定,mbstate_t中可能存在非平凡状态。你当然不能移植序列化这些对象。 可以获取偏移类型(std::streamoff)的值,该值是整数类型,其值可以序列化。