Структура данных, которую я хотел бы сериализовать, - это в основном список объектов. Объект может иметь указатель на другой. Последовательность завершается с конфликтом указателя. http://www.boost.org/doc/libs/1_60_0/libs/serialization/doc/exceptions.html#pointer_conflictРасширение сериализации с помощью указателей
Вот минимальный пример моей структуры данных: (Моя реальная структура является более сложной.)
struct Data
{
std::vector<Object> objects;
}
struct Object
{
std::string name;
Object *other;
}
я могу работать вокруг меняется список элементов для указателей std::vector<Object*>
, потому что импульс может создать элементы в любом месте, однако, это очень навязчиво. Еще одна идея - убедиться, что все объекты созданы сначала, а затем указатели. Но как я могу это достичь? Любые альтернативы?
Вы бы вычислили ID с помощью арифметики указателя, например 'other - & objects [0]'? Звучит выполнимо, но требует специальных методов сохранения и загрузки. – SpamBot
Да, когда вы загружаете объект в новое приложение, вы можете построить сопоставление между ID и адресом памяти, а другой объект может использовать идентификатор, который ищет адрес объекта (а затем сам объект), а затем построить сопоставление между ними. Я сделал такое сопоставление в моем проекте, и он работал хорошо. –