我正在为以下问题寻找一些设计建议:
我正在使用 boost 几何,我有几个与 boost 几何兼容的自定义几何类型(通过特征),但我使用的大多数类型都是 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,然后可以使用将存储在(反)序列化器中的类型来投射几何图形?但是,序列化程序需要为每种几何类型提供一个保存方法吗?例如:保存(myPolygon),保存(myPoint)
有什么想法/经验吗?