我使用 Clang 从 C ++ 源代码构建AST,并使用 RecursiveASTVisitor 遍历树。
如果是类,结构或联合,我想在访问的记录声明中做出决定。我有一个重写函数 VisitCXXRecordDecl(clang :: CXXRecordDecl)。在这个函数中,我可以check any information about CXXRecordDecl该类提供,但我不知道如何获取该信息。
任何人都可以帮助我吗?
答案 0 :(得分:9)
答案 1 :(得分:2)
在运行时,C ++不区分类和结构,而union只能通过其数据成员共享地址空间这一事实来区分。
因此,实现此目标的唯一方法是在类/结构/联合定义中包含元数据,以支持对您很重要的区别。例如:
typedef enum { class_ct, struct_ct, union_ct } c_type;
class foo {
public:
c_type whattype() { return class_ct; }
};
struct bar {
public:
c_type whattype() { return struct_ct; }
};
union baz {
public:
c_type whattype() { return union_ct; }
};
// B