clang-tutorial.html   [plain text]


<!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 &lt;&lt; D-&gt;getNameAsString() 
    &lt;&lt; '\n';
  return false;
}
</pre>

  <p>Walk and print base classes of a class:</p>
  <pre>
for(CXXRecordDecl::base_class_iterator 
      B = D-&gt;bases_begin(), BEnd = D-&gt;bases_end();
      B != BEnd; ++B) {
  QualType BaseType = B-&gt;getType();
  std::cout &lt;&lt; "  " &lt;&lt; BaseType.getAsString() 
    &lt;&lt; '\n';
}
</pre>

  <p>Retrieve the C++ class declaration from a base type:</p>
  <pre>
if (const RecordType *RTy
             = BaseType-&gt;getAs&lt;RecordType&gt;()) { 
  RecordDecl *Base = RTy-&gt;getDecl();
  if (CXXRecordDecl *BaseCXX
        = dyn_cast&lt;CXXRecordDecl&gt;(Base)) {
  
  }
}
</pre>
</div>
</body>
</html>