На этом шаге мы рассмотрим поддержку сериализации в произвольном классе.
Мы уже показывали, как в объекте документа могут находиться другие объекты, реализующие собственные процедуры сериализации. Сериализуемый класс создается в следующей последовательности.
Вот пример объявления сериализуемого класса:
// MyClass.h class CMyClass : public CObject { DECLARE_SERIAL(CMyClass) public: CMyClass() {;} // Конструктор по умолчанию virtual void Serialize(CArchive& ar); };
IMPLEMENT_SERIAL(CMyClass, CObject, 1)
Номер структуры позволяет отслеживать изменения версий файлов с документами. Вполне вероятно, что структура документов Вашего приложения будет изменяться по мере выпуска новых версий программы. Это иногда создает проблемы для пользователя, который попытается открыть в новой версии документ, созданный более старым вариантом программы.
Чтобы исключить это, Вы можете при изменении структуры объекта откорректировать номер структуры в макросе IMPLEMENT_SERIAL. Это позволит добавить в программу код, способный обнаруживать несоответствия между версиями приложения и документа и предпринять ответные действия, например выдать сообщение об ошибке или запустить подпрограмму преобразования формата открываемого документа.
На следующем шаге мы рассмотрим сериализацию классов-наборов.