Я хочу создать приложение, в котором пользователь может редактировать диаграмму (например), которая обеспечивала бы стандартные механизмы: Save, Load, Undo и Redo.
Простой способ сделать это состоит в том, чтобы иметь классы для диаграммы и для различных фигур в ней, которые реализуют сериализацию с помощью методов сохранения и загрузки и где все методы для их редактирования возвращают UndoableAction
, которые могут быть добавлены к UndoManager
, который вызывает их метод perform
и добавляет их в стек отмены.
Проблема с простым способом, описанным выше, заключается в том, что для этого требуется много ошибок, связанных с работой шаблонов.
Я знаю, что сериализация (сохранение/загрузка) части работы может быть решена с помощью чего-то вроде буферов протокола Google или Apache Thrift, который генерирует код сериализации кодовой таблички для вас, но он не решает отмену + повторить проблему. Я знаю, что для Objective C и Swift Apple предоставляет Core Data, который решает сериализацию + отмену, но я не знаком ни с чем похожим на С++.
Есть ли хороший способ, не подверженный ошибкам, для решения save + load + undo + redo с небольшим шаблоном?