Я хотел бы использовать одну из этих библиотек сериализации для архивирования контейнера STL, который удерживает необработанные указатели на объект. Тем не менее, я не хочу (или нуждается) хранить указатели, а также объекты, на которые они указывают. Упомянутые объекты будут иметь свою собственную реализацию сохранения/нагрузки, которая гарантирует, что они будут перезагружены в том же порядке вместе с вектором, который можно проиндексировать для получения нового адреса после перезагрузки.
Таким образом, я Нужен метод для выполнения следующего перевода при архивировании контейнеров, удерживающих эти указатели: < /p>
В магазине архивируйте только индекс (уже является переменной класса) < /li >
При загрузке используйте индекс, чтобы найти новый адрес и восстановить его в контейнере < /li>
< /ul>
Этот пример должен помочь проиллюстрировать : < /p>
typedef struct MyStruct* MyPtr;
struct MyStruct {
// many instances of this struct will already exist when I restore MyMap below
// this index is guaranteed to uniquely identify an identical instance run-to-run
// even though the address will be different
// I want to save this index in place of MyPtr in the archived MyMap on archive save
int index {0};
// more data ...
}
// this index can then be used to lookup the address of it's MyStruct instance
// on archive load
std::vector pool;
// this STL container is what actually needs to be archived, but (as stated above)
// instead of saving MyPtr, I want to save the integer index
// then on load, use that to lookup the new address and restore that to the container
typedef std::unordered_map MyMap;
MyMap myMap;
void doWork() {
// read MyMap from archive: ar >> myMap;
// work with MyMap
// save MyMap to archive: myMap >> ar;
}
< /code>
Кажется, это должно быть возможно из того, что я могу сделать из документации, но я не успешно выполнил эту работу. < /p>
Я изначально пытался реализовать Это с использованием Boost :: serialization. Легко просто сохранить индекс, но при загрузке поведение библиотеки по умолчанию состоит в том, чтобы создать новый экземпляр объекта, указанного, а затем восстановить индекс к этому. Я попытался переопределить это, используя признаки сериализации класса, а именно уровни реализации и/или отслеживания, без успеха. пришел к (возможно, неправильному) выводу, что попытка сделать то, что я хочу, не будет возможна из метода MyStruct :: serialize (). Я думал, что смогу использовать помощника для поиска индекса, но к тому времени, когда метод serialize () вызывается, кажется, что слишком поздно делать что -либо с отслеживанием, которое приводит к созданию объекта при нагрузке.
Когда я изначально нашел библиотеку зерновых в качестве возможной альтернативы, я надеялся, поскольку она просто не беспокоилась ни о чем. Тем не менее, теперь я застрял со статичкой_ассертом, говоря, что необработанные указатели не поддерживаются, и вместо этого использую умный указатель (что не является вариантом для меня.) < /P>
Я надеялся, что предоставление Пользовательская обработка типа для MyPTR может обеспечить поведение, которое мне нужно, но теперь кажется, что мне, возможно, придется специализировать предоставленную сериализацию контейнеров STL и/или архивные шаблоны. Оба из которых выглядит сложным. Пропустил что -то очевидное? Можно ли предоставить простой метод обработки указателей mystructs, или я застрял, пытаясь специализировать все необходимые мне контейнеры STL? Или, может быть, это то, чего я не вижу, что может сделать это в специализации архива?
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/794 ... -boostseri
Как сериализовать необработанное указатель с пользовательским поведением, используя библиотеки Boost :: Serialization ил ⇐ C++
Программы на C++. Форум разработчиков
1739332380
Anonymous
Я хотел бы использовать одну из этих библиотек сериализации для архивирования контейнера STL, который удерживает необработанные указатели на объект. Тем не менее, я не хочу (или нуждается) хранить указатели, а также объекты, на которые они указывают. Упомянутые объекты будут иметь свою собственную реализацию сохранения/нагрузки, которая гарантирует, что они будут перезагружены в том же порядке вместе с вектором, который можно проиндексировать для получения нового адреса после перезагрузки.
Таким образом, я Нужен метод для выполнения следующего перевода при архивировании контейнеров, удерживающих эти указатели: < /p>
В магазине архивируйте только индекс (уже является переменной класса) < /li >
При загрузке используйте индекс, чтобы найти новый адрес и восстановить его в контейнере < /li>
< /ul>
Этот пример должен помочь проиллюстрировать : < /p>
typedef struct MyStruct* MyPtr;
struct MyStruct {
// many instances of this struct will already exist when I restore MyMap below
// this index is guaranteed to uniquely identify an identical instance run-to-run
// even though the address will be different
// I want to save this index in place of MyPtr in the archived MyMap on archive save
int index {0};
// more data ...
}
// this index can then be used to lookup the address of it's MyStruct instance
// on archive load
std::vector pool;
// this STL container is what actually needs to be archived, but (as stated above)
// instead of saving MyPtr, I want to save the integer index
// then on load, use that to lookup the new address and restore that to the container
typedef std::unordered_map MyMap;
MyMap myMap;
void doWork() {
// read MyMap from archive: ar >> myMap;
// work with MyMap
// save MyMap to archive: myMap >> ar;
}
< /code>
Кажется, это должно быть возможно из того, что я могу сделать из документации, но я не успешно выполнил эту работу. < /p>
Я изначально пытался реализовать Это с использованием Boost :: serialization. Легко просто сохранить индекс, но при загрузке поведение библиотеки по умолчанию состоит в том, чтобы создать новый экземпляр объекта, указанного, а затем восстановить индекс к этому. Я попытался переопределить это, используя признаки сериализации класса, а именно уровни реализации и/или отслеживания, без успеха. пришел к (возможно, неправильному) выводу, что попытка сделать то, что я хочу, не будет возможна из метода MyStruct :: serialize (). Я думал, что смогу использовать помощника для поиска индекса, но к тому времени, когда метод serialize () вызывается, кажется, что слишком поздно делать что -либо с отслеживанием, которое приводит к созданию объекта при нагрузке.
Когда я изначально нашел библиотеку зерновых в качестве возможной альтернативы, я надеялся, поскольку она просто не беспокоилась ни о чем. Тем не менее, теперь я застрял со статичкой_ассертом, говоря, что необработанные указатели не поддерживаются, и вместо этого использую умный указатель (что не является вариантом для меня.) < /P>
Я надеялся, что предоставление Пользовательская обработка типа для MyPTR может обеспечить поведение, которое мне нужно, но теперь кажется, что мне, возможно, придется специализировать предоставленную сериализацию контейнеров STL и/или архивные шаблоны. Оба из которых выглядит сложным. Пропустил что -то очевидное? Можно ли предоставить простой метод обработки указателей mystructs, или я застрял, пытаясь специализировать все необходимые мне контейнеры STL? Или, может быть, это то, чего я не вижу, что может сделать это в специализации архива?
Спасибо!
Подробнее здесь: [url]https://stackoverflow.com/questions/79431713/how-to-serialize-a-raw-pointer-with-custom-behavior-using-either-the-boostseri[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия