Clang 工具,检查是否最终或覆盖

Clang tooling, check if final or override

是否有 "clang way" 来检查 CXXMethodDecl 是否指定了 overridefinal 关键字?

对于代表CXXMethodDecl的字符串,我可以通过std::string::find(" override")来查看,但是这样看起来有点难看。

原来finaloverride隐藏在clang::Decl的属性中。所以底层代码检查 final.

的方法
bool FinalReplacer::VisitCXXMethodDecl(CXXMethodDecl *methodDecl) {
    auto pos = find_if(methodDecl->attr_begin(), methodDecl->attr_end(), [](Attr *a) {
        return (a->getKind() == attr::Kind::Final);
    });
    if (pos != methodDecl->attr_end()) {
        //Do something here.
    }
    return true;
}

override 属性类似的是 attr::Kind::Override

可在 clang/Basic/AttrList.inc

中找到 clang::Decl 的完整属性列表