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

时间:2017-03-20 17:19:53

标签: clang libtooling

是否有" clang方式"检查CXXMethodDecloverride个关键字是否指定了final

我可以通过std::string::find(" override")检查代表CXXMethodDecl的字符串,但这种方式看起来有点难看。

1 个答案:

答案 0 :(得分:2)

事实证明,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的完整属性列表