| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" | 
 |           "http://www.w3.org/TR/html4/strict.dtd"> | 
 | <html> | 
 | <head> | 
 |   <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> | 
 |   <title>Clang - Quick Tutorial</title> | 
 |   <link type="text/css" rel="stylesheet" href="menu.css" /> | 
 |   <link type="text/css" rel="stylesheet" href="content.css" /> | 
 | </head> | 
 | <body> | 
 |  | 
 | <!--#include virtual="menu.html.incl"--> | 
 |  | 
 | <div id="content"> | 
 |  | 
 | <h1>Tutorial</h1> | 
 |  | 
 |   <p>Invoking the BoostCon tool:</p> | 
 |   <pre> | 
 | $ clang -cc1 -boostcon t.cpp | 
 | </pre> | 
 |  | 
 |   <p>Teach the BoostCon action to identify and print C++ classes:</p> | 
 |   <pre> | 
 | bool VisitCXXRecordDecl(CXXRecordDecl *D) { | 
 |   std::cout << D->getNameAsString()  | 
 |     << '\n'; | 
 |   return false; | 
 | } | 
 | </pre> | 
 |  | 
 |   <p>Walk and print base classes of a class:</p> | 
 |   <pre> | 
 | for(CXXRecordDecl::base_class_iterator  | 
 |       B = D->bases_begin(), BEnd = D->bases_end(); | 
 |       B != BEnd; ++B) { | 
 |   QualType BaseType = B->getType(); | 
 |   std::cout << "  " << BaseType.getAsString()  | 
 |     << '\n'; | 
 | } | 
 | </pre> | 
 |  | 
 |   <p>Retrieve the C++ class declaration from a base type:</p> | 
 |   <pre> | 
 | if (const RecordType *RTy | 
 |              = BaseType->getAs<RecordType>()) {  | 
 |   RecordDecl *Base = RTy->getDecl(); | 
 |   if (CXXRecordDecl *BaseCXX | 
 |         = dyn_cast<CXXRecordDecl>(Base)) { | 
 |    | 
 |   } | 
 | } | 
 | </pre> | 
 | </div> | 
 | </body> | 
 | </html> |