C++ 如何从clang AST节点打印源位置

C++ 如何从clang AST节点打印源位置,c++,clang,abstract-syntax-tree,C++,Clang,Abstract Syntax Tree,我正在轻松地学习教程。我设法创建了一个匹配类定义的AST匹配器,我的MatchFinder如下所示 class ClassDeclPrinter : public MatchFinder::MatchCallback { public: virtual void run(const MatchFinder::MatchResult &result) override { if (clang::NamedDecl const* nd = result.Nodes.getNo

我正在轻松地学习教程。我设法创建了一个匹配类定义的AST匹配器,我的MatchFinder如下所示

class ClassDeclPrinter : public MatchFinder::MatchCallback
{
public:
  virtual void run(const MatchFinder::MatchResult &result) override
  {
    if (clang::NamedDecl const* nd = result.Nodes.getNodeAs<clang::NamedDecl>("id"))
    {
      nd->dump();
    }
  }
};
类ClassDeclPrinter:PublicMatchFinder::MatchCallback { 公众: 虚拟无效运行(常量MatchFinder::MatchResult&result)覆盖 { if(clang::NamedDecl const*nd=result.Nodes.getNodeAs(“id”)) { nd->dump(); } } }; 如果在匹配的节点上调用dump(),则输出已包含其文件和源位置:

CXXRecordDecl 0x10dd250 </home/name/llvm-dev/build/../../cpp/classes.cpp:4:1, line:6:1> class B definition
CXXRecordDecl 0x10dd250 B类定义

然而,当我调用getLocation()时,我只得到一个SourceLocation对象,它的print()和dump()函数需要一个SourceManager实例才能工作。我不知道如何获取此SourceManager,或者是否有其他方法获取可打印的源位置。

正确的SourceManager可通过

result.Context->getSourceManager();