6

我使用Clang从C++源代码构建 AST,并使用RecursiveASTVisitor来遍历树。

我想在访问的记录声明中决定它是类、结构还是联合。我有一个被覆盖的函数VisitCXRecordDecl(clang::CXRecordDecl)。在这个函数中,我可以检查该类提供的有关 CXXRecordDecl的任何信息,但我不知道如何获取这些信息。

谁能帮我?

4

2 回答 2

12

只需使用isStructisClassisUnion成员函数,或者如果您愿意,可以调用getTagKind来获取TagKind您可以使用的值。switch他们在TagDecl基类中。

于 2012-05-08T06:27:21.170 回答
2

在运行时,C++ 不区分类和结构,而联合仅通过其数据成员都共享地址空间这一事实来区分。

因此,实现这一点的唯一方法是在您的类/结构/联合定义中包含元数据,以支持对您很重要的区别。例如:

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

于 2012-05-07T17:46:54.287 回答