Вы можете использовать Шаблон посетителя , он позволяет перебирать вашу иерархию, выполняя различные операции в зависимости от узла, который обрабатывает Посетитель в настоящее время.
Плохая новость: вам, вероятно, нужно добавить хотя бы виртуальный метод в начало иерархии и, возможно, переопределить его в некоторых производных классах, и посетитель все равно получит доступ к данным узлов, но вы отделите формат файла, как разные посетители реализации могут записывать данные, собранные по-разному.
Взгляните также на образец сувенира , если необходимо скрыть данные иерархии классов. Эта статья также может быть полезна.
Редактировать: ссылка на оригинальную статью с образцом сувенира с использованием кеша Google