是否有" clang方式"检查CXXMethodDecl
或override
个关键字是否指定了final
?
我可以通过std::string::find(" override")
检查代表CXXMethodDecl
的字符串,但这种方式看起来有点难看。
答案 0 :(得分:2)
事实证明,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
的完整属性列表