C++ clang查询和CxMemberCallExpr匹配器

C++ clang查询和CxMemberCallExpr匹配器,c++,clang,abstract-syntax-tree,matcher,C++,Clang,Abstract Syntax Tree,Matcher,我试图找到如何使用CXXMemberCallExpr将匹配器与clang查询结合使用 我尝试过各种案例排列,但都没能成功。与dump相比,第一个字符的大小写似乎较低,因此在clang查询中,eg FunctionDecl变成FunctionDecl 如果-ast dump matcher名称与铿锵查询名称匹配就好了,但我猜它们不匹配 例如 如果人们想提供更多帮助,我想创建一个到Virtual::foo()的匹配器,所以所有对基类Virtual函数的调用都是如此 这就是我试图使用的代码 class

我试图找到如何使用CXXMemberCallExpr将匹配器与clang查询结合使用

我尝试过各种案例排列,但都没能成功。与dump相比,第一个字符的大小写似乎较低,因此在clang查询中,eg FunctionDecl变成FunctionDecl

如果-ast dump matcher名称与铿锵查询名称匹配就好了,但我猜它们不匹配

例如

如果人们想提供更多帮助,我想创建一个到Virtual::foo()的匹配器,所以所有对基类Virtual函数的调用都是如此

这就是我试图使用的代码

class Virtual
{
   public:
      virtual void foo()
      {
      }
};

class Real : public Virtual
{
   public:
      virtual void foo()
      {
      }
};

void bar()
{
   Virtual *v=new Real();
   Real *r=new Real();
   Virtual *v2=new Virtual();

   v->foo();
   r->foo();
   v2->foo();

   delete v;
   delete r;
   delete v2;
}

完整AST(太长无法粘贴)的clang-Xclang-AST dump virt.cc的clang命令我还没有使用clang查询,但我目前正在研究如何在我自己的项目中使用它


看看ASTMatcher,我认为您想要使用的函数是
memberCallExpr()
CxMemberCallExpr
是一种类型,我认为在查询中没有使用它。

Clang已经继续-我最初尝试调用它的方式不正确,它是
match CxMemberCallExpr()

class Virtual
{
   public:
      virtual void foo()
      {
      }
};

class Real : public Virtual
{
   public:
      virtual void foo()
      {
      }
};

void bar()
{
   Virtual *v=new Real();
   Real *r=new Real();
   Virtual *v2=new Virtual();

   v->foo();
   r->foo();
   v2->foo();

   delete v;
   delete r;
   delete v2;
}