Допустим, у меня есть CXXRecordDecl только со статическими элементами, все они подняты на внешнюю связь:
struct S {
static constexpr int x = 10;
static constexpr int y = 20;
static void foo() {...}
};
AST выглядит следующим образом:
TranslatioUnitDecl
...
CXXRecordDecl struct S definition
-CXXRecordDecl implicit struct S
-VarDecl x
-IntegralLiteral 10
-VarDecl y
-IntegralLiteral 20
-CXXMethodDecl foo
...
Я думаю, что из-за «статического» элемента данных в CXXRecordDecl нет FieldDecl, вместо него есть 2 VarDecl. Так как мне получить доступ к 2 VarDecl из CXXRecordDecl? Для этого в CXXRecordDecl нет функции API.
Единственный способ, о котором я могу думать, это использовать класс RecursiveASTVisitor и посещать все decls. VarDecl имеет логические функции API isStaticDataMember () и isConstexpr (), чтобы помочь, отлично! Но как мне узнать, что является родительским классом для этих статических VarDecl?
Любое предложение будет оценено по достоинству!