我使用来自lib clang的AST匹配器来确保一些代码存在于foo
函数体中。
auto matcher1 = functiondecl(hasname("foo"),
hasdescendant(...))));
auto matcher2 = functiondecl(hasname("foo"),
hasdescendant(...))));
我想对functiondecl(hasname("foo"), hasdescendant(...)
部分进行重复数据删除。例如,如果我想找到一个构造函数,我可以写
auto ctor = inFoo(cxxConstructorExpr());
似乎我可以用AST_MATCHER_P
写我自己的匹配器,但我不知道怎么做。
你能给我一个自定义匹配器的例子来删除我的匹配器的开始部分吗?
你可以直接使用
template <class T>
auto inFoo(T && f)
{
return functiondecl(hasname("foo"), hasdescendant(std::forward<T>(f)));
}