1

是否有“clang 方式”来检查是否CXXMethodDecloverrideorfinal关键字指定?

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

4

1 回答 1

3

原来,那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::Decl可以在clang/Basic/AttrList.inc中找到完整的属性列表

于 2017-05-20T13:41:59.523 回答