Skip to content

Commit

Permalink
[docs][LLVM-style RTTI] Add a mention of multiple inheritance.
Browse files Browse the repository at this point in the history
llvm-svn: 228479
  • Loading branch information
chisophugis committed Feb 7, 2015
1 parent 7f95aac commit b8d41c5
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions llvm/docs/HowToSetUpLLVMStyleRTTI.rst
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,20 @@ contract for ``classof`` is "return ``true`` if the dynamic type of the
argument is-a ``C``". As long as your implementation fulfills this
contract, you can tweak and optimize it as much as you want.

For example, LLVM-style RTTI can work fine in the presence of
multiple-inheritance by defining an appropriate ``classof``.
An example of this in practice is
`Decl <http://clang.llvm.org/doxygen/classclang_1_1Decl.html>`_ vs.
`DeclContext <http://clang.llvm.org/doxygen/classclang_1_1DeclContext.html>`_
inside Clang.
The ``Decl`` hierarchy is done very similarly to the example setup
demonstrated in this tutorial.
The key part is how to then incorporate ``DeclContext``: all that is needed
is in ``bool DeclContext::classof(const Decl *)``, which asks the question
"Given a ``Decl``, how can I determine if it is-a ``DeclContext``?".
It answers this with a simple switch over the set of ``Decl`` "kinds", and
returning true for ones that are known to be ``DeclContext``'s.

.. TODO::

Touch on some of the more advanced features, like ``isa_impl`` and
Expand Down

0 comments on commit b8d41c5

Please sign in to comment.