https://github.com/foonathan/cppast
Just played around with this, a wrapper to Clang's #cpp AST that makes it super easy to traverse.
You create a parser that can take in a list of headers/source files, and specify any defines, flags, or include directories you want. From there it gives you an AST that can be traversed to check for docstrings (`/// or /**`), class names, members, `public/private` keywords, `[[attribute]]` tags, base classes, if its a struct or a class, and any error messages from clang!