| <!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> |