我有一个包含类定义的C ++头文件,我想检索其成员变量的类型和名称。
像Eclipse和Visual Studio这样的编辑器可以实现代码的可视化,所以我感兴趣的是它们是否也提供了一些(可能是原生的)脚本语言或者Java中的API,这将允许将成员变量类型和名称作为字符串获取并且,比方说,将它们写入文件。如果没有,那么可能有实用程序将类描述转储到类似XML的文件中?
答案 0 :(得分:2)
IDE基本上使用C ++编译器来提取此信息,因为解析C ++很难。更糟糕的是,如果C ++编译器在编写代码时应该可以正常工作,那么它必须是容错的。
Visual Studio在项目文件夹中创建SQL Server数据库。这是用于代码完成的数据库,也就是IntelliSense。查找文件“projectname.sdf”。您可以编写Visual Studio add in,打开此数据库并访问其成员。我已经这样做了。
但是:绝对无法保证此数据库中的信息完整无误。对于小型项目,它可能会正常工作,对于具有几个100k LOC的大型项目,数据库几乎肯定不会100%完成。如果您想基于此数据库自动生成代码,请非常非常小心。
Visual Studio编译器生成一个调试符号数据库,您可以在编译项目后进行查询。 There is an example project on MSDN to do that.
Clang提供了一个API来完成这项工作。见libclang et al.
从该页面开始:
Clang提供了编写需要有关程序的语法和语义信息的工具的基础结构。本文档将简要介绍编写clang工具的不同方法及其优缺点。
这肯定是比1)更好的选择,因为您实际访问了中间编译器语法树。有几个人(例如Apple,Google)已经编写了基于Clang的重构工具和语法检查器。 More information here.
一个重要提示: Clang目前无法解析许多Windows标头,因为它不支持所有Microsoft编译器选项。