使用指针增强序列化
Boost serialization with pointers
我想序列化的数据结构主要是对象列表。一个对象可能具有指向另一个对象的指针。然后,序列化将失败,并出现指针冲突。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*>
因为 boost 可以在任何地方创建元素,但是,这非常具有侵入性。另一个想法是确保首先创建所有对象,然后创建指针。但是我怎样才能做到这一点呢?还有其他选择吗?
您可以执行以下操作:1) 在对象中定义一个 ID2)序列化类时,使用ID作为指针3)完成所有数据后,循环所有对象以使ID到实际指针
如果这只是一个向量,那么您可以在执行串行和反串行时忽略 Object 指针,因为您知道它是连续链接的,因此在执行反串行时很容易通过将前一个对象的临时指针链接到当前对象来连续重新链接。
我终于解决了我的pointer_conflict问题,对多次引用的所有数据使用(智能)指针。
struct Data
{
std::vector< std::unique_ptr<Object> > objects;
}
struct Object
{
std::string name;
Object *other;
}
由于Object
可能始终在任意位置创建,因此序列化中的顺序无关紧要。缺点是数据结构已更改。在我的应用程序中,这需要对Data
的 getter 和 setter 方法进行一些更改。
相关文章:
- 增强基于 XML class_id的反序列化
- 增强序列化,按基类型加载存档类会产生错误的数据
- 增强多重继承的序列化
- 来自抽象基础的次要化因增强序列化而失败
- 如何更改或删除标签,以增强序列化
- 崩溃:分段故障:增强序列化加载 - 用null调用构造函数
- 在同一程序中使用谷物并增强序列化
- 使用指针增强序列化
- 如何增强序列化STL容器
- 增强序列化多态性类
- 增强动态阵列的序列化
- 增强多边形序列化:环
- 多个库并增强序列化
- 增强mpfr_float的序列化
- 增强数据的序列化十六进制十进制编码
- 增强序列化-启用对象跟踪
- 在取消引用的基类指针上增强序列化
- c++增强序列化如何防止不正确的文件崩溃
- 跟踪何时为增强序列化添加数据成员
- 在关闭RTTI的情况下增强简单类的序列化(-fno-rtti)