次の問題に対する設計上のアドバイスを探しています。
ブーストジオメトリを使用しています。ブーストジオメトリと互換性のあるカスタムジオメトリタイプがいくつかあります(特性を介して)が、使用しているタイプのほとんどは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ジオメトリには共通の基本クラスがありません。
バイナリとして格納できる複数のタイプがあり、共有基本クラスがない場合、通常、皆さんはどのようにシリアル化にアプローチしますか?
ブーストを返すシリアライザークラスを作成することを考えていました。その後、(デ)シリアライザーに格納されるタイプを使用してジオメトリをキャストできますか?しかし、シリアライザーは、ジオメトリタイプごとにsaveメソッドを必要としますか?例:Save(myPolygon)、Save(myPoint)
何かアイデア/経験はありますか?