2017-03-20 45 views
0

有沒有「叮叮噹噹」來檢查CXXMethodDecl是否與overridefinal關鍵字一起指定?Clang模具,檢查是否最終或覆蓋

我可以通過std::string::find(" override")來檢查代表CXXMethodDecl的字符串,但這種方式看起來有點難看。

回答

1

原來,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

找到