2016-05-24 54 views
0

我很滿足以下問題。從CXXConstructorDecl的inits返回一個空列表在以下情形:叮噹AST:獲取CXXCtorInitializer列表的構造函數,他們的聲明不是一個定義

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

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

現在,如果我改變Test3的構造函數的定義,我可以把它內聯爲:

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

    } 
}; 

一切工作正常和功能inits返回a和b的2個項目的列表。

+0

你能告訴我們一個最小的完整例子嗎? – max66

+0

嘗試調用'getBody()'也許? – feersum

回答

0

做正確的方法是做到以下幾點:

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

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

現在構造函數是一個指針也有名單inits的定義。

相關問題