Здравствуйте, rsdh, Вы писали:
R>В исходном сообщении я написал как я разделил версии "файл". Как быть с читателем, писателем и ядром? Мой вариант — аналогично структурам, вынести все классы-обработчики данных, имеющие какое-либо отношение к функционалу порождающему отличия в версиях, в пространства имен и использовать так
Возможно проще сделать конвертеры, понижающие\повышающие версию файла. Тогда основная программа всегда работает с самой новой версией, а при загрузке \ сохранении при необходимости запускается конвертер. Однако при гигабайте данных возможны тормоза. С другой стороны, конвертер запускается сравнительно редко.
Если в файле просто лежат массивы структур — можно описать содержимое структуры:
struct FieldDescr
{
unsigned id;
unsigned size;
enum Type { Int, Float, Char, ... } type;
unsigned arraySize;
};
struct StructDescr
{
vector<FieldDescr> fields;
};
void convert(StructDescr srcDescr, const void *src, StructDescr trgFile, void *trg)
{
// анализирует описание полей и выполняет преобразования
}