CXXRecordDecl с дочерним VarDecl? - PullRequest
0 голосов
/ 28 марта 2019

Допустим, у меня есть 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?

Любое предложение будет оценено по достоинству!

1 Ответ

0 голосов
/ 28 марта 2019

Я думаю, что нашел свой ответ.Существует базовый класс DeclContext для многих блоков decls, включая RecordDecl.Этот класс имеет открытые функции-члены для итерации всех decls внутри структуры, взгляните на decls_begin () и decls_end ().

...