C++ 当众决定访问的CXXRecordDecl是类、结构还是联合

C++ 当众决定访问的CXXRecordDecl是类、结构还是联合,c++,clang,abstract-syntax-tree,C++,Clang,Abstract Syntax Tree,我使用Clang从C++源代码构建AST,并使用递归ASTVISITOR遍历树 我想在访问记录声明时决定它是类、结构还是联合。我有一个被重写的函数VisitCXXRecordDecl(clang::CXXRecordDecl)。在这个函数中,我可以看到类提供的信息,但我不知道如何获取这些信息 可以帮助我吗?< P>运行时,C++没有区分类和结构,而联合只能通过数据成员共享地址空间这一事实来区分。 因此,实现这一点的唯一方法是在类/结构/联合定义中包含元数据,以支持对您很重要的区别。例如: typ

我使用ClangC++源代码构建AST,并使用递归ASTVISITOR遍历树

我想在访问记录声明时决定它是类、结构还是联合。我有一个被重写的函数VisitCXXRecordDecl(clang::CXXRecordDecl)。在这个函数中,我可以看到类提供的信息,但我不知道如何获取这些信息


可以帮助我吗?

< P>运行时,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

只需使用、
isClass
isUnion
成员函数,或者调用
getTagKind
获取一个值,您可以
根据需要打开该值。它们在基类中。

来自标准:9.5.2:“联合可以有成员函数(包括构造函数和析构函数),但不能有虚拟(10.3)函数。”我已经测试了上述代码,它可以工作。