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