2013-09-03 4 views
1

У меня есть заголовочный файл C++, содержащий определение класса, и я хочу получить типы и имена его переменных-членов.Как получить имена переменных члена класса C++?

Редакторы, такие как Eclipse и Visual Studio, делают это, чтобы визуализировать код, поэтому мне интересно, если они также предоставляют API на некотором (возможно, родном) языке сценариев или, возможно, на Java, что позволит получить типы и имена переменных-членов строки и, скажем, записать их в файл. Если нет, то, возможно, есть утилиты, чтобы сбрасывать описание класса в некоторый XML-подобный файл?

+0

Если вы хотите, чтобы это во время выполнения единственный путь будет объявляющего их на экспорт (__declspec (dllexport)), а затем с помощью LoadLibrary, перечисляя экспортируемые символы, декодировании их и делать свое дело. (Очевидно, что работает только с окнами) – user1233963

+0

Компиляторы MSVC могут быть настроены для создания файла базы данных pdb (program database). Вы можете запросить это. Но в C++ нет никакого отражения в качестве стандартного, в отличие от Java. – Bathsheba

+0

Это для документации? (то есть кислород) –

ответ

2

IDEs в основном используют компилятор C++ для извлечения этой информации, поскольку синтаксический анализ C++ затруднен. Хуже того, компилятор C++ должен быть отказоустойчивым, если он должен работать во время написания кода.

  1. Visual Studio создает базу данных SQL Server в папке проекта. Это база данных, используемая для завершения кода aka 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 предоставляет инфраструктуру для записи инструментов, которые нуждаются в синтаксической и семантической информации о программе. В этом документе дается краткое введение различных способов написания инструментов clang, их плюсов и минусов.

    Это, безусловно, лучший вариант, чем 1), потому что вы фактически обращаетесь к дереву синтаксиса промежуточного компилятора. Несколько человек (например, Apple, Google) написали инструменты рефакторинга и синтаксические проверки на основе Clang. More information here.

    Одно большое оговорка: В настоящее время Clang не может анализировать многие заголовки Windows, поскольку он не поддерживает все параметры компилятора Microsoft.

  4. GCC can dump its syntax tree too.

Смежные вопросы