@INPROCEEDINGS{BCV05,
  title = {{Translating Double-Dispatch into Single-Dispatch}},
  author = {Bettini, Lorenzo and Capecchi, Sara and Venneri, Betti},
  booktitle = {Proceedings of the Second Workshop on Object Oriented Developments (WOOD 2004)},
  pages = {59-78},
  abstract = {Goals of flexibility and re-usability in typed object-oriented languages suggest
      the requirement of double dispatch, i.e., the mechanism of dynamically selecting
      a method not only according to the run-time type of the receiver (single
      dispatch), but also to the run-time type of the argument.  However, many
      mainstream languages, such as, e.g., C++ and Java, do not provide it, resorting
      to only single dispatch.  In this paper we present a general technique for
      adding double dispatch as a type-safe language feature, so yielding dynamic
      overloading and covariant specialization of methods, without  extending basic
      semantics.  To this aim we introduce a toy core  language, extended to a full
      form of (non encapsulated) multi methods.  Then we define a translation
      algorithm from multi methods to the core language, that implements double
      dispatch by using only standard mechanisms of static overloading and single
      dispatch.  As a main feature, our translation preserves type safety, it uses
      neither RTTI nor type downcasts and does not introduce crucial overhead during
      method selection.},
  publisher = {Elsevier},
  series = {ENTCS},
  volume = {138},
  number = {2},
  year = {2005},
  url = {http://rap.dsi.unifi.it/bibliography/files/doubledisp.pdf},
}