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 回答