我有一个大项目,以及大量以下形式的 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"
to "Listener"
,该函数不再匹配。我猜这是因为它是模板参数的名称std::weak_ptr
类模板。
我已经尝试了此查询的许多不同变体,但我还没有找到与我感兴趣的功能相匹配的查询。
有什么指点吗?
一行:
clang-query> m cxxMethodDecl(hasAnyParameter(hasType(allOf(cxxRecordDecl(matchesName("weak_ptr")), classTemplateSpecializationDecl(hasTemplateArgument(0, templateArgument(refersToType(hasDeclaration(cxxRecordDecl(matchesName(".*Listener")))))))))))
铿锵格式:
cxxMethodDecl(hasAnyParameter(
hasType(allOf(cxxRecordDecl(matchesName("weak_ptr")),
classTemplateSpecializationDecl(hasTemplateArgument(
0, templateArgument(refersToType(hasDeclaration(
cxxRecordDecl(matchesName(".*Listener")))))))))))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)