Find clang::按名称键入clang AST

Find clang::按名称键入clang AST,clang,clang++,llvm-clang,llvm-c++-api,libclang,Clang,Clang++,Llvm Clang,Llvm C++ Api,Libclang,在Clang AST中,是否可以按名称查找类型 例如,我有限定名:nspace::my_type。如何检查当前翻译单元中是否存在类型?注意:我的知识非常有限,只需写一次铿锵有力的检查就可以进行所需的更新。可能是错的 根据手头的任务,在clang AST中可能需要两件事:Type和TypeLocation。我需要类型位置,所以这是我首先要提到的 查找类型拼写。 在本例中,实际需要的是TypeLocationast节点。它们代表一种类型的拼写。 不幸的是,它们不是通过叮当声查询打印的 搜索它们的方法

在Clang AST中,是否可以按名称查找类型

例如,我有限定名:
nspace::my_type
。如何检查当前翻译单元中是否存在类型?

注意:我的知识非常有限,只需写一次铿锵有力的检查就可以进行所需的更新。可能是错的

根据手头的任务,在clang AST中可能需要两件事:
Type
TypeLocation
。我需要类型位置,所以这是我首先要提到的

查找类型拼写。 在本例中,实际需要的是
TypeLocation
ast节点。它们代表一种类型的拼写。 不幸的是,它们不是通过叮当声查询打印的

搜索它们的方法是使用
类型\u loc
匹配器

这是我所需要的:查找
wide
模板的所有专业知识。 这将为我找到
wide

wideLoc
-是我用来更改类型拼写的内容

不同的
type\u loc
的父级也是
type\u loc

例如,我可以找到
T
的所有条目,除非它们位于
wide

查找该类型的所有实际用法,无论其拼写如何。 现在,对于这种类型的问题,您需要匹配一个类型

我本人从未这样做过,但我们可以看到abseil在这里这样做:

PS。以防万一-所有叮当作响的ast匹配器:

l isWide            hasDeclaration(classTemplateDecl(namedDecl(hasName("wide"))))
l isWideSpec        templateSpecializationType(isWide)
l wideLoc           typeLoc(loc(isWideSpec))
typeLoc(loc(asString("T")), unless(hasAncestor(wideLoc)))