<div dir="ltr">Hey guys,<div><br></div><div>I am new to clang and I am trying to get the specialized name of template classes and functions. For example, the std::map container is an STL class with template parameters. map<string, int> should be expanded as something similar to std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>. I have written a simple clang tool to get the function name and the class name of functions, here is a piece of code:</div><div><br></div><div>map<string, set<string>> func_set;<br><br>DeclarationMatcher methodMatcher = cxxMethodDecl().bind("methods");<br><br>class MethodPrinter : public MatchFinder::MatchCallback {<br>public :<br>  virtual void run(const MatchFinder::MatchResult &Result) {<br>    if (const CXXMethodDecl *md = Result.Nodes.getNodeAs<clang::CXXMethodDecl>("methods")) {<br>         string f_name = md->getNameAsString();<br>           string c_name = md->getParent()->getNameAsString();<br><br>         if (auto tsd = dyn_cast<ClassTemplateSpecializationDecl>(md->getParent()))<br>                 c_name = tsd->getNameAsString();<br><br>       func_set[c_name].insert(f_name);<br>    }<br>  }<br>};<br></div><div><br></div><div>This piece of code is getting me started, but not quite there. The getNameAsString() method just gives a very simple name, without the template parameters specialized. I am wondering if there is a way to do that.</div><div><br></div><div>Any help is appreciated!</div><div><br></div><div>Jason</div></div>