在 Clang AST 中存储 Decl 节点
Storing Decl nodes in Clang AST
我正在尝试将所有 FunctionDecl 节点存储在一个向量中,以便我将来可以访问它们。用例将用于进入函数(例如函数 a 调用函数 b,我希望能够在函数 b 节点上调用 VisitDecl)
所有这些节点的存储都在 ASTConsumer 的 HandleTopLevelDecl 中完成:
std::vector<Decl> vec;
virtual bool HandleTopLevelDecl (DeclGroupRef DG) {
for (DeclGroupRef::iterator i = DG.begin(), e = DG.end(); i != e; ++i) {
Decl *D = *i;
vec.push_back(*D);
}
}
但是,在编译过程中出现错误 '~Decl' is a protected member of 'clang::Decl'
任何人都可以对此有所了解吗?
问题是您将 Decl
实例的副本放入数组中。创建和删除这些对象是其他人的责任 class,因此您只能引用一个实例。
以下是针对您的问题的正确解决方案:
std::vector<Decl *> vec;
virtual bool HandleTopLevelDecl (DeclGroupRef DG) {
for (DeclGroupRef::iterator i = DG.begin(), e = DG.end(); i != e; ++i) {
Decl *D = *i;
vec.push_back(D);
}
}
我正在尝试将所有 FunctionDecl 节点存储在一个向量中,以便我将来可以访问它们。用例将用于进入函数(例如函数 a 调用函数 b,我希望能够在函数 b 节点上调用 VisitDecl)
所有这些节点的存储都在 ASTConsumer 的 HandleTopLevelDecl 中完成:
std::vector<Decl> vec;
virtual bool HandleTopLevelDecl (DeclGroupRef DG) {
for (DeclGroupRef::iterator i = DG.begin(), e = DG.end(); i != e; ++i) {
Decl *D = *i;
vec.push_back(*D);
}
}
但是,在编译过程中出现错误 '~Decl' is a protected member of 'clang::Decl'
任何人都可以对此有所了解吗?
问题是您将 Decl
实例的副本放入数组中。创建和删除这些对象是其他人的责任 class,因此您只能引用一个实例。
以下是针对您的问题的正确解决方案:
std::vector<Decl *> vec;
virtual bool HandleTopLevelDecl (DeclGroupRef DG) {
for (DeclGroupRef::iterator i = DG.begin(), e = DG.end(); i != e; ++i) {
Decl *D = *i;
vec.push_back(D);
}
}