Сохранение объектов при сохранении слабой связи

Я работаю над проектом в микроконтроллере, и мне нужно сохранить некоторые настройки. Представьте, что это iPod. Мне нужно сохранить различные настройки, такие как CurrentSongPlaying, CurrentVolume и т. д., чтобы при повторном включении я мог восстановить эти настройки. Проблема, с которой я сталкиваюсь, заключается в том, что имеет смысл хранить все мои энергонезависимые настройки в одной структуре, которую я могу сериализовать/десериализовать из памяти, но я не могу найти способ сделать это без того, чтобы класс выполнял сериализация/десериализация из энергонезависимой памяти, включая каждый класс, содержащий параметр, который необходимо сохранить для информации о размере/типе. Есть ли какой-то шаблон дизайна, который позволит мне сохранить все эти настройки в памяти, не зная, что я сохраняю?


person Joel B    schedule 02.08.2012    source источник
comment
Можете ли вы показать пример, хотя бы псевдокод того, чего вы пытаетесь достичь?   -  person netcoder    schedule 02.08.2012
comment
Вы не можете перейти на C++? Наследование/полиморфизм делает все это намного проще!   -  person Martin James    schedule 03.08.2012
comment
Похоже, вам просто нужен ассоциативный массив.   -  person netcoder    schedule 03.08.2012
comment
@netcoder - похоже, это именно то, что мне нужно, вы должны сделать свой комментарий ответом.   -  person Joel B    schedule 03.08.2012


Ответы (2)


Похоже, вам просто нужен ассоциативный массив. Ассоциативный массив (или карта) — это контейнер, который позволяет сопоставлять разные значения с уникальными ключами. Он может иметь фиксированный или динамический размер в зависимости от реализации. В сочетании с надлежащим механизмом сериализации он позволяет сохранять и восстанавливать его состояние без необходимости заранее знать его содержимое.

Однако C не предоставляет эту структуру данных «из коробки». Посмотрите на этот вопрос для нескольких реализаций. Наиболее распространенной реализацией является хэш-таблица, также называемая хэш-картой.

person netcoder    schedule 03.08.2012

ООП и классы нелегко реализовать на C.

Если использование C является обязательным, я бы написал структуру в файл.

Затем я читал их и анализировал во время инициализации при перезагрузке.

Вы можете думать об этом как о сериализации своих структур самостоятельно.

person smangum    schedule 02.08.2012
comment
Это подход, который я предложил в своем вопросе, проблема в том, что я должен включить все остальные классы (файлы заголовков) для любого объекта (типа), который я хочу сериализовать, чтобы структура могла знать о них. Как мне избежать того, чтобы класс, выполняющий запись/чтение, включал каждый файл, содержащий объект, который я хотел бы сохранить в памяти. - person Joel B; 03.08.2012