clang-query:检查函数参数类型的模板参数名称
clang-query: Examining name of template parameter of a function argument's type
我有一个大项目,还有大量 C++ class 形式的成员函数:
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
class 模板的模板参数的名称。
我已经尝试了这个查询的许多不同变体,但我还没有找到与我感兴趣的函数相匹配的变体。
有什么指点吗?
一行:
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")))))))))))
我有一个大项目,还有大量 C++ class 形式的成员函数:
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
class 模板的模板参数的名称。
我已经尝试了这个查询的许多不同变体,但我还没有找到与我感兴趣的函数相匹配的变体。
有什么指点吗?
一行:
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")))))))))))