2017-03-20 3 views
0

CXXMethodDecloverride 또는 final 키워드로 지정되어 있는지 확인하는 "clang 방식"이 있습니까?Clang tooling, final 또는 override를 확인하십시오.

나는 CXXMethodDecl을 나타내는 문자열에 대해 std::string::find(" override")으로 확인할 수 있지만이 방법은 약간보기 흉하게 보입니다.

답변

1

clang::Decl의 속성에 finaloverride이 숨겨져있는 것으로 나타났습니다. 따라서 기본 코드는 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

에서 찾을 수 있습니다.