【问题标题】:Nested Structures/Unions defined in C/C++ header files in XML by Reflection通过反射在 XML 中的 C/C++ 头文件中定义的嵌套结构/联合
【发布时间】:2012-07-31 15:57:40
【问题描述】:

我有一个表示如下的结构:(示例)

struct struct3
{
   struct structchild4
   {  
      float child5;
   } child6;
   unsigned int child7;
};

我希望它在 XML 中表示如下:

<tag1= "struct3">
        <name>struct3</name>
        <input_type>byte</input_type>
        <method></method>
        <tag_ref = "structchild4">
            <name>child6</name>
        </tag_ref>
        <tag2= "child7">
            <name>child7</name>
            <len>4</len>
            <value> </value>
        </tag2>
    </tag1>

我遵循的方法是将其转换为 gccXML 格式,然后使用 Visual C++ 对其进行解析。我使用 xerces-c DOM 解析器。

有人能建议如何去做吗?对此进行温和的反弹。无论如何我可以发送我的代码吗?它巨大并且超过了字符限制。谢谢!

【问题讨论】:

  • 我不确定您的问题是什么,您将使用 gccXML 解析头文件并使用 Xerces DOM 解析器解析生成的 XML,我说对了吗?,您是什么确切地问?
  • 手头的任务是将 C/C++ 头文件转换为指定的 XML 格式。因此,我对头文件进行了以下操作: 1) 使用 gccXML 将头文件转换为 gccXML 格式 2) 使用 Xerces-c DOM Parser 解析生成的 XML。我想尝试反射。 gccXML 没有足够的信息来构建所需的 XML。我觉得。谢谢!
  • 是的,@GearoidMurphy 你是对的。
  • “gccXML 没有足够的信息”。你确定吗?它缺少什么信息?如果它确实缺少信息[您展示了一个我期望不在 gccXML 导出的 type 信息中的“大小”示例],那么您将面临艰难的选择:a) 修改 gccXML 本身(开源! ) 添加您需要的信息,b) 切换到可以提供此信息的其他一些基础设施。
  • ...当您获得“理想”的 XML 输出时,然后呢? “反射”与此有什么关系,除非您的意思是“反射是获取代码库信息的一种手段”?

标签: c++ visual-c++ reflection


【解决方案1】:

如您所知,gccXML 有一些明显的限制,here 描述了许多开源 C++ 解析器。不幸的是,C++ 中的 relfection 对编码人员来说是很多工作(但仍然是一个很好的练习),我最喜欢的方法是使用 clang python API,clang 是一个出色的 C++ 解析器,但由您决定如何处理这些信息(通过输出到 XML 或 JSON)。曾经有一个XML printer for Clang,但不幸的是我不相信它仍然处于活动状态,但您也许可以使用早期版本。祝你好运!

【讨论】:

  • 谢谢@Gearoid Murphy。我的代码的最终输出必须采用特定的 XML 格式。需要注意的是,对于解析函数、枚举、typedef 等,我使用了 gccXML 描述和 xerces-c DOM Parser。我可以将 CLang 仅用于结构吗?相反,我能否对公正的结构给予优惠待遇?谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
相关资源
最近更新 更多