我正在为以下问题寻找一些设计建议:
我正在使用 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/