2017-02-16 2 views

Antwort

0

Diese Matcher packen die ‚öffentliche‘ Erklärung:

accessSpecDecl(
    isPublic(), 
    hasAncestor(cxxRecordDecl().bind("crd"))).bind("asd") 

In der Callback-Klasse können Sie die Anzahl der Treffer verfolgen die Matcher für eine gegebene Strukturdeklaration werden, zum Beispiel mit einem std::map<string,int>:

struct report_public : public MatchCallback{ 
    using map_t = std::map<string,int>; 
    using map_it = map_t::iterator; 

    map_t count; 

    void run(MatchResult const & result){ 
    AccessSpecDecl const * asd = result.Nodes.getNodeAs<AccessSpecDecl>("asd"); 
    CXXRecordDecl const * crd = result.Nodes.getNodeAs<CXXRecordDecl>("crd"); 
    if(asd && crd){ 
     string const struct_name = crd->getNameAsString(); 
     map_it it = count.find(struct_name); 
     if(it != count.end()) count[struct_name]++; 
     else count[struct_name] = 1; 
    } 
    else { /* error handling */} 
    return; 
    } // run 
}; // report_public 
+0

Ok, so wie ich es verstehe, ist es nicht möglich, das nur mit Matcher zu erreichen? – igagis

+0

Ich weiß nicht, wie ich 'größer als einer dieser Knoten' sagen soll. –

Verwandte Themen