У меня есть библиотека, которая может сохранять / загружать на диск "chunks", которые являются структурами POD с постоянным размером и уникальным статическим полем CHUNK_ID.Таким образом, загрузка выглядит примерно так:
void Load(int docId, char* ptr, int type, size_t& size)...
Если вы хотите добавить новый блок, вы просто добавляете struct с новым CHUNK_ID и используете для этого функции Save Load.
То, что я хочу, это форсироватьвсе «чанки» должны иметь такие функции, как PrintHumanReadable, CompareThisTypeOfChunk и т. д. (в идеале программа не должна компилироваться без таких функций).Также я хочу отметить / зарегистрировать / перечислить все структурные элементы.
У меня есть несколько идей, но у всех есть проблемы.
- Создание базового класса с чисто виртуальными функциями PrintHumanReadable,CompareThisTypeOfChunk.Проблема: нарушает тип модуля и требует переписывания библиотеки.
- Реализация фабрики, которая создает структуру чанка из CHUNK_ID.Проблема: компилируется, когда я добавляю новый чанк без необходимых функций.
Не могли бы вы порекомендовать элегантное дизайнерское решение для моей проблемы?