У меня есть логика сериализации, в которой я также сериализую структуры данных stl.В настоящее время я просто пишу поле размера, а затем итерирую каждый элемент структуры.В десериализации я читаю поле размера, а затем знаю, когда я закончила читать структуру данных.
Нет, вопрос в том, как правильно написать поле размера и независимо от системы.В настоящее время я использую std::iterator_traits<const_iterator>::difference_type
как тип для хранения в файле.Однако я не уверен, гарантированно ли этот тип является независимым от системы или может измениться, когда я пытаюсь обмениваться файлами между различными системами.
Я посмотрел на этот тип для std::string
и вв этом случае sizeof(std::iterator_traits<std::string::const_iterator>::difference_type)
возвращает 8 на 64-битной машине.Так что я думаю, что в этом случае это просто typedef для size_t
, который занимает одно слово.В настоящее время у меня нет доступной 32-битной машины, поэтому я не могу проверить, не отличается ли ее размер от этого.
Гарантируется ли это стандартом как переносимость, или я должен использовать какой-либо фиксированный тип для всех данныхструктуры здесь для кодирования длины?