На своей работе я использую API из пакета программ под названием "Understand 4 C ++" от scitools .Я использую это, чтобы написать все мои инструменты статического анализа.Я даже написал .NET API, чтобы обернуть их C API.Который я ставлю на codeplex .
Как только вы это сделаете, выгрузить все типы классов легко:
ClassType[] allclasses = Database.GetAllClassTypes()
foreach (ClassType c in allclasses)
{
Console.WriteLine("Class Name: {0}", c.NameLong);
}
Теперь для небольшой предыстории о моей задаче, которая похожа на вашу.В некоторые годы мы должны поддерживать наш двоичный SDK обратно совместимым с SDK предыдущих лет.В этом случае полезно сравнить код SDK между выпусками, чтобы проверить возможные критические изменения.Однако с парой сотен файлов и десятками тысяч строк комментариев это может быть большой головной болью, если использовать инструмент различий текста, такой как Beyond Compare или Araxis.Так что мне действительно нужно обратить внимание на фактические изменения кода, не переупорядочивание, не перемещение кода вверх и вниз по файлу, не добавление комментариев и т. Д. *
Итак, инструмент, который я написал для выгрузкивесь код.
В одном текстовом файле я сбрасываю все все классы.Для каждого класса я печатаю свое дерево наследования, его функции-члены как виртуальные, так и не виртуальные.Для каждой виртуальной функции я печатаю, какие виртуальные методы родительского класса она переопределяет (если есть).Я также распечатываю его переменные-члены.То же самое относится и к структурам.В другом файле я печатаю все макросы.В другом файле я печатаю все typedefs.
Затем, используя это, я могу различать эти файлы с файлами из предыдущего выпуска.Тогда сразу становится ясно, что изменилось от релиза к релизу.Например, легко увидеть, где параметр функции был изменен с TCHAR * на const TCHAR *, например.