2017-03-20 3 views
0

Gibt es einen "klingenden Weg", um zu überprüfen, ob CXXMethodDecl mit override oder final Schlüsselwörter angegeben ist?Clang Tooling, prüfen, ob final oder override

Ich kann es durch std::string::find(" override") für die Zeichenfolge CXXMethodDecl überprüfen, aber dieser Weg sieht ein wenig hässlich.

Antwort

1

Es stellte sich heraus, dass die final und override in den Attributen der clang::Decl versteckt sind. Der zugrunde liegende Code überprüft also die Methode für 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; 
} 

Ebenso für override Attribut ist attr::Kind::Override.

Eine vollständige Liste der Attribute für clang::Decl finden Sie in clang/Basic/AttrList.inc

Verwandte Themen