2 стратегии, которые вы упомянули
A) Напишите сложные алгоритмы сериализации, чтобы преобразовать каждый сложный тип данных в примитивы, а затем сохранить в двоичный файл; или
B) Просто запишите все в файл ASCII в соответствии с моей первоначальной стратегией.
Как это обычно делается. По сути, вы создаете свой собственный формат файла. Наиболее распространенной парадигмой является парадигма чанка. Когда вы сохраняете объект или набор объектов, сначала вы пишете int, представляющий размер объекта или «порцию» данных. И следующий int, представляющий вид объекта. Возможно, вы также захотите включить информацию о версии, если вы заботитесь о поддержке конфигураций, которые вы сохраняете, когда пользователь обновляет свое программное обеспечение.
Опция A полезна, когда вы заботитесь о том, чтобы данные были очень точными, и облегчает проблемную загрузку / сохранение в c ++. Например. Сохраненные таким образом поплавки будут загружены с тем же значением, что и сохраненные.
Опция B полезна, когда вы хотите увидеть, что вы сохраняете, и, возможно, для того, чтобы человек каким-то образом изменил данные вручную. Поплавки, сохраненные здесь, при загрузке не будут точно такими же.
Попробуйте посмотреть другие форматы файлов для примера. Формат файла Midi использует парадигму чанков, а также имеет функцию потоковой передачи, которая использует опцию A. Формат файла obfront Wavefront используется в 3D-приложении, для простоты которого используется опция B. Все читается в вашем любимом текстовом редакторе.