Один метод, который я использовал для определения структуры данных в моих классах чтения / записи в файле данных, - это использование std::map<std::string, std::vector<std::string>, string_compare>
, где ключ - это имя переменной, а вектор строк - данные. Хотя это дорого в памяти, это не ограничивает меня только числовыми данными. И этот метод допускает различную длину данных в одном и том же файле.
У меня был базовый класс, реализующий это общее хранилище, в то время как производные классы реализовали возможность чтения / записи. Затем я использовал фабрику, чтобы добраться до нужного обработчика, используя другой класс, который определил формат файла.