c++ - 如何检索 C++ 类成员变量名?

标签 c++ xml eclipse visual-studio api

我有一个包含类定义的 C++ 头文件,我想检索它的成员变量的类型和名称。

像 Eclipse 和 Visual Studio 这样的编辑器这样做是为了可视化代码,所以我很感兴趣他们是否也提供一些(可能是 native 的)脚本语言或 Java 的 API,这将允许获取成员变量类型和名称作为字符串并且,比如说,将它们写入文件。如果没有,那么也许有一些实用程序可以将类描述转储到一些类似 XML 的文件中?

最佳答案

IDE 基本上使用 C++ 编译器来提取此信息,因为解析 C++ 很困难。更糟糕的是,如果 C++ 编译器在您编写代码时能够正常工作,那么它必须是容错的。

  1. Visual Studio 在您的项目文件夹中创建一个 SQL Server 数据库。这是用于代码完成的数据库,又名 IntelliSense。查找文件“projectname.sdf”。您可以编写一个 Visual Studio 插件来打开该数据库并访问其成员。我已经这样做了。

    但是:绝对不能保证此数据库中的信息是完整和正确的。在小型项目上它可能会正常工作,在具有几个 100k LOC 的大型项目上,数据库几乎肯定不会 100% 完整。如果你想根据这个数据库自动生成代码,要非常非常小心。

  2. Visual Studio 编译器生成调试符号数据库,您可以在编译项目后查询该数据库。 There is an example project on MSDN to do that.

  3. Clang 提供了一个 API 来执行此操作。参见 libclang et al.

    从那个页面:

    Clang provides infrastructure to write tools that need syntactic and semantic information about a program. This document will give a short introduction of the different ways to write clang tools, and their pros and cons.

    这肯定是比 1) 更好的选择,因为您实际上访问了中间编译器语法树。一些人(例如 Apple、Google)已经编写了基于 Clang 的重构工具和语法检查器。 More information here.

    一个重要警告:Clang 目前无法解析许多 Windows header ,因为它不支持所有 Microsoft 编译器选项。

  4. GCC can dump its syntax tree too.

关于c++ - 如何检索 C++ 类成员变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18588435/

相关文章:

c# - 将 JSON 数组转换为 XML

c# - 我如何使用 linq to xml 在 xml 文件中添加新标签

android - 将 ListView 中的最后一项放在底部

eclipse - 如何在 SVN Eclipse 中的分支上工作?

c++ - IEEE Std 754 Floating-Point : let t := a - b, 标准是否保证 a == b + t?

c++ - 给定范围内数字因子的最大总和

C++ 将指针的指针设置为空?

c++ - resize() 和 reserve() 有什么区别?

java - eclipse Ant 构建包不存在

java - 如何访问 XText 中当前打开文件的位置