c++ - 在没有公共(public)基类的情况下进行序列化

标签 c++ serialization boost boost-geometry

我正在为以下问题寻找一些设计建议:

我正在使用 boost geometry,我有几个与 boost geometry 兼容的自定义几何类型(通过特征),但我使用的大多数类型都是 typedef。

class MyPoint
{
  // custom stuff
};
// declare traits for MyPoint for use wih boost geometry here

class MyTaggedPoint : public MyPoint
{
  // more custom stuff
};
// declare traits for MyTaggedPoint for use wih boost geometry here

// example typedefs
typedef boost::geometry::model::polygon<MyPoint>        Polygon;
typedef boost::geometry::model::polygon<MyTaggedPoint>  TaggedPolygon;

我的问题是当我想序列化/反序列化我的几何图形时。

假设所有几何图形都存储在数据库的二进制字段中。如果我有一个基本几何类,我可能只写 g->type() (4 个字节)并调用 g->save(some_outputstream) 并将所有这些写入二进制字段。然后在读取二进制字段时,我会简单地读取字节并转换为适当的几何类型。

但是 Boost 几何体没有有一个共同的基类。

当有多种类型可以存储为二进制并且你们没有共享基类时,你们通常如何处理序列化?

我在想也许有一个 Serializer 类,它返回一个 boost.Any,然后可以使用将存储在(反)序列化器中的类型转换几何图形?但是序列化程序需要为每个几何类型保存方法吗?例如:保存(我的多边形)、保存(我的点)

有什么想法/经验吗?

最佳答案

Boost's serialization如果您不想重新实现轮子,则支持非侵入式序列化。您甚至可以在某处找到对其几何类型的库支持。不幸的是,由于 XML 问题,接口(interface)有些复杂。

关于c++ - 在没有公共(public)基类的情况下进行序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7337435/

相关文章:

c++ - 多路复用 LED 矩阵的 Arduino 代码优化

c++ - Qt 将信号连接到槽

c++ - Boost heap 设置用户定义的比较函数

php - 序列化复选框数组

c++ - 如何在Linux Mint 18上运行的Eclipse中使用Boost.Python?

boost - boost::MPL 和 boost::fusion 之间的区别

c++ - 指向成员函数的函数指针

c++ - 在 CUDA 中使用内部类型转换的奇怪错误

java - 文件中序列化对象的数量

java - jackson 序列号 : Unwrap collection elements using