@ARTICLE{BCV06,
  title = {{Double Dispatch in C++}},
  author = {Bettini, Lorenzo and Capecchi, Sara and Venneri, Betti},
  journal = {Software - Practice and Experience},
  pages = {581 - 613},
  abstract = {Double dispatch is the ability of selecting dynamically 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.  This mechanism unleashes the power of
      dynamic binding in object-oriented languages, so enhancing re-usability and
      separation of responsibilities.  However, many mainstream languages, such as,
      e.g., C++ and Java, do not provide it, resorting to only single dispatch.
      In this paper we propose an extension of C++  (applicable also to other OO
      languages) that enables double dispatch as a language feature.  This yields
      dynamic overloading and covariant specialization of methods.  We define a
      translation from the new constructs to standard C++ and we present the
      preprocessor implementing this translation, called doublecpp.  The translated
      code enjoys static type safety and implements the semantics of double dispatch
      by using only standard mechanisms of static overloading and dynamic binding,
      with minimal impact on the performance of the program.},
  volume = {36},
  number = {6},
  year = {2006},
  url = {http://rap.dsi.unifi.it/bibliography/files/spelxb.ps.gz},
}