是否有“clang 方式”来检查是否CXXMethodDecl
用override
orfinal
关键字指定?
我可以通过std::string::find(" override")
字符串来检查它CXXMethodDecl
,但是这种方式看起来有点难看。
是否有“clang 方式”来检查是否CXXMethodDecl
用override
orfinal
关键字指定?
我可以通过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中找到完整的属性列表