2016-05-24 4 views
0

Ich bin mit dem folgenden Problem conrrunting. Die inits von CXXConstructorDecl gibt eine leere Liste im folgenden Szenario:Clang AST: CXXCtorInitializer Liste für Konstruktoren, dass ihre Deklaration nicht auch eine Definition ist

class Test3 { 
    int a = 2; 
    int b; 
    Test3(); 
}; 

Test3::Test3() : b(0) { 
} 

Nun, wenn ich die Definition des Test3 Konstruktor ändern und ich es machen inline als:

class Test3 { 
    int a = 2; 
    int b; 
    Test3() 
    : a(2) 
    , b(2){ 

    } 
}; 

Alles funktioniert gut und Funktion inits gibt eine Liste von 2 Elementen für a und b zurück.

+0

Können Sie uns ein minimales vollständiges Beispiel zeigen? – max66

+0

Versuchen Sie, 'getBody()' vielleicht aufzurufen? – feersum

Antwort

0

Der richtige Weg, es zu tun ist folgendes zu tun:

if (!ctor->isThisDeclarationADefinition()) { 
    for (auto ctorFromList : ctor->redecls()) { 
    CXXConstructorDecl *ctr = dyn_cast_or_null<CXXConstructorDecl>(
     ctorFromList); 

    if (ctr != ctor) { 
     ctor = ctr; 
     break; 
    } 
    } 

Jetzt Ctor ist ein Zeiger auf die Definition, die auch die Liste für inits hat.

Verwandte Themen