1

ある種の内省を可能にするC++ライブラリを設定しました。これにより、最小限のマクロとかなりの量のテンプレートトリックを使用して、メタ情報が豊富な構造とクラスを宣言できます。

このメタ情報は、宣言する構造体/クラスの各フィールドに関するすべての重要な詳細をキャプチャし、ストーリーの最後に、このように強化された構造体/クラスごとに、ダンプするxmlファイルを生成できます。各フィールド、その名前、タイプ、長さ、オフセットなど。

私の問題では、ポインターであるフィールドをサポートする必要はありませんが、プリミティブ型、配列、およびSTLコンテナー(ベクトル、リストなど)のみをサポートする必要があります。

これらのメタエンリッチな構造体/クラス(「プロデューサー」)にデータを入力するコードは、特定の時点でそれらをシリアル化します(今のところ、すべてのプリミティブ型と、STLコンテナーによって使用されるすべての「バッファー」の単純なバイナリダンプです。どれか)。

次に、「プロデューサー」によって作成されたxml記述から始めて、保存されたデータのさまざまなフィールドにアクセスするために、実行時に対応できる「リーダー」の開発を開始する必要があります。

これは動的データディクショナリ解釈の問題だと思いますが、私が知っていることはすべて、バイナリデータとそのxml記述を持っている間にxmlデータを読み戻すことに関連しています...

これを始めるための最良の方法は何ですか?この問題に似ていて、私がインスピレーションを得ることができる何かがそこにありますか?

4

2 に答える 2

1

/* smarc はシンプルにしています */

  class xmlstream
  {
  ...
  };

  class ibase
  {
  void read( xmlstream& rStream ) = 0;
  void write( xmlstream& rStream ) = 0;
  };

  class classfactory
  {
  void produce( xmlstream& rStream );
  void consume( xmlstream& rStream );  
  ibase* create( xmlstream& rStream );
  void destroy( ibase* pBase );
  };

  class class1 : public ibase
  {
  static class1* create( );
  static void    destroy( class1* pObject );
  void read( xmlstream& rStream );
  void write( xmlstream& rStream );
  };

  class class2 : public ibase
  {
  static class1* create( );
  static void    destroy( class1* pObject );
  void read( xmlstream& rStream );
  void write( xmlstream& rStream );
  };

これが明確でない場合は、私に任せてください。

于 2008-12-02T16:20:37.920 に答える
0

Boost Serializationを見ましたか?それはあなたが求めることをほとんど行います。

于 2009-04-10T00:46:26.213 に答える