6

我有一个大项目,以及大量 C++ 类成员函数,形式如下:

Return CClass::MemberFunction(
   Arg1 arg1,
   //...
   std::weak_ptr<IMemberFunctionListenerInterface> listener) {
//...
}

我正在尝试编写一个匹配器来查找像这样的函数,这些函数的参数类型的名称中包含字符串“Listener”。

我可以找到类型weak_ptr名称中带有“”的参数的函数:

clang-query> m cxxMethodDecl(hasAnyParameter(hasType(cxxRecordDecl(matchesName("weak_ptr")))))

这很好地匹配了上面的函数。但是,如果我更改"weak_ptr""Listener",则该功能不再匹配。我猜这是因为它是std::weak_ptr类模板的模板参数的名称。

我已经尝试了这个查询的许多不同的变体,但我还没有找到与我感兴趣的函数相匹配的那个。

任何指针?

4

1 回答 1

2

一行:

clang-query> m cxxMethodDecl(hasAnyParameter(hasType(allOf(cxxRecordDecl(matchesName("weak_ptr")), classTemplateSpecializationDecl(hasTemplateArgument(0, templateArgument(refersToType(hasDeclaration(cxxRecordDecl(matchesName(".*Listener")))))))))))

clang 格式:

cxxMethodDecl(hasAnyParameter(
    hasType(allOf(cxxRecordDecl(matchesName("weak_ptr")),
                  classTemplateSpecializationDecl(hasTemplateArgument(
                      0, templateArgument(refersToType(hasDeclaration(
                             cxxRecordDecl(matchesName(".*Listener")))))))))))
于 2021-03-01T22:36:51.490 回答