Clang 工具,检查是否最终或覆盖
Clang tooling, check if final or override
是否有 "clang way" 来检查 CXXMethodDecl
是否指定了 override
或 final
关键字?
对于代表CXXMethodDecl
的字符串,我可以通过std::string::find(" override")
来查看,但是这样看起来有点难看。
原来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 way" 来检查 CXXMethodDecl
是否指定了 override
或 final
关键字?
对于代表CXXMethodDecl
的字符串,我可以通过std::string::find(" override")
来查看,但是这样看起来有点难看。
原来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
的完整属性列表