Я ищу способ разобрать код С++ для получения базовой информации о классах. Мне действительно не нужна большая информация из самого кода, но мне нужно, чтобы он обрабатывал такие вещи, как макросы и шаблоны. Короче говоря, я хочу извлечь "структуру" кода, что вы увидите на диаграмме UML.
Для каждого класса /struct/union/enum/typedef в базе кода все, что мне нужно (после обработки шаблонов и макросов):
- Их имя
 - Пространство имен, в котором они живут
 - Поля, содержащиеся внутри (имя типа, имя поля и ограничения доступа, такие как private/mutable/etc)
 - Функции, содержащиеся внутри (тип возврата, имя, параметры)
 - Объявляющий файл
 - Номера строк/столбцов (или смещение байта в файле), где начинается определение этих данных
 
Фактические инструкции в коде не имеют значения для моих целей.
Я ожидаю, что многие люди скажут, что я должен просто использовать регулярное выражение для этого (или даже Flex и Bison), но они не очень эффективны, так как мне действительно нужны обработчики препроцессора и шаблона.