比方说,我有一个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。那么如何从CXXRecordDecl访问2 VarDecl?为此,CXXRecordDecl中没有API函数。
我能想到的唯一方法是使用RecursiveASTVisitor类并访问所有decl。 VarDecl具有布尔API函数isStaticDataMember()和isConstexpr()来帮助您,太好了!但是我怎么知道这些静态VarDecl的父类是什么?
任何建议将不胜感激!
答案 0 :(得分:0)
我想我找到了自己的答案。对于许多块decl(包括RecordDecl),都有一个基类DeclContext。此类具有公共成员函数,以迭代结构中的所有decl,请参阅decls_begin()和decls_end()。