Как можно безопасно сериализовать std:: basic_istream<char>:: pos_type?

В одном из моих проектов я должен кэшировать информацию о местоположении определенных фрагментов данных, найденных в больших файлах. Я уже реализовал небольшой API, построенный вокруг std::basic_istream<char>::pos_type размещены на картах.

Теперь мне нужно сериализовать эти дескрипторы в поток байтов и записать их на диск для дальнейшего использования (также на других *nix-машинах). Я читал, что этот тип зависит от платформы, но все же является POD-типом. Итак, мои вопросы:

  • Не лучше ли будет что-то сохранить помимо просто смещений? Например std::fpos<std::mbstate_t> сохраняя состояние структуры чтения?
  • Как можно безопасно получить и восстановить данные смещения из std::basic_istream<char>::pos_type (и другая информация, если это необходимо)?

Заранее спасибо.

1 ответ

Решение

Структура std::fpos<mbstate_t> не указано и может быть нетривиальное состояние в mbstate_t, Вы, конечно, не можете портативно сериализовать эти объекты. Вы можете получить значение типа смещения (std::streamoff), который является целочисленным типом, и его значение может быть сериализовано.

Другие вопросы по тегам