0
有沒有「叮叮噹噹」來檢查CXXMethodDecl
是否與override
或final
關鍵字一起指定?Clang模具,檢查是否最終或覆蓋
我可以通過std::string::find(" override")
來檢查代表CXXMethodDecl
的字符串,但這種方式看起來有點難看。
有沒有「叮叮噹噹」來檢查CXXMethodDecl
是否與override
或final
關鍵字一起指定?Clang模具,檢查是否最終或覆蓋
我可以通過std::string::find(" override")
來檢查代表CXXMethodDecl
的字符串,但這種方式看起來有點難看。
原來,final
和override
隱藏在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