我有一個AST消費者得到所有的TagDecl它們的結構與如何從TagDecl獲得結構成員鏗鏘
clang::TagDecl::isStruct()
如何在數組中獲得結構的成員(聲明,類型)像FunctionDecl類:
clang::FunctionDecl::getParamDecl(unsigned i)
還是以其他方式?
我有一個AST消費者得到所有的TagDecl它們的結構與如何從TagDecl獲得結構成員鏗鏘
clang::TagDecl::isStruct()
如何在數組中獲得結構的成員(聲明,類型)像FunctionDecl類:
clang::FunctionDecl::getParamDecl(unsigned i)
還是以其他方式?
必須將TagDecl
轉換爲RecordDecl
,這些方法具有獲取成員/字段信息的方法。
clang::TagDecl*t;
clang::RecordDecl*r;
clang::RecordDecl::field_iterator jt;
for(jt = r->field_begin(); jt != r->field_end();++jt)
{
std::cout << jt->getType().getAsString() << " " << jt->getNameAsString() << std::endl;
}
void HandleTagDeclDefinition(TagDecl *D) override
{
if(D->isStruct())
{
DeclContext *DC = static_cast<DeclContext *>(D);
for (DeclContext::decl_iterator DI = DC->decls_begin(), DEnd = DC->decls_end();
DI != DEnd; ++DI)
{
DI->dump();
}
}
}
你應該這個功能添加到您擴展到ASTConsumer類。這方面
每聲明範圍內聲明的
存儲可以包含聲明的一些數字。例如,對於 示例,C++類(由RecordDecl表示)包含各種成員函數,字段,嵌套類型等等。所有這些 聲明都將存儲在DeclContext中,並且可以通過[DeclContext :: decls_begin(), DeclContext :: decls_end())迭代遍歷聲明。該機制提供了上下文中以聲明爲中心的聲明視圖。
請儘量避免只是傾銷碼作爲回答,並試圖解釋它做什麼,以及爲什麼。對於那些沒有相關編碼經驗的人來說,你的代碼可能並不明顯。 – Frits