【发布时间】:2014-01-07 09:37:16
【问题描述】:
我有一个带有序列化方法的类型类节点。 Node 有派生类:BigNide、SmallNode..(等等)。以及它们的派生类——VitalBigNode。 它们中的每一个也都有序列化方法,该方法调用了他的基类的序列化方法。 (通过序列化::base_object)。 到目前为止,serialize 非常适合各种节点。
这是棘手的部分: 有一个 (Node*)s(指向节点的指针)的列表容器,其中包含来自各种节点(派生类)的对象。 我想序列化这个容器。我已经拼命尝试了许多 unique_ptr、shared_ptr、多态、BOOST_CLASS_EXPORT 等的组合使用,但都是徒劳的。
列表“序列化器”将列表中的每个对象都关联为纯 Node 对象。它调用 Node 类的 serialize 方法。当然,它会抛出一个错误——一个丑陋的错误。
仍在尝试解决问题,在Node类的序列化方法中,我尝试编写代码来识别派生类并在序列化之前将对象动态转换为派生转换。由于必须在其派生类之前声明 Node,这是非常有问题的。此外,必须在 Node 声明头中设置 serialize 方法的 DEFINITION。所以我不能只在 Node 声明中声明 Node::serialize,然后包含派生类,然后定义 Node::serialize 方法。
一定有我错过的充分且已知的解决方案!
非常感谢您的帮助! 埃拉德。
【问题讨论】:
标签: c++ pointers serialization boost polymorphism