title: Polymorphic Enums
body: <p>Polymorphic Enums?</p>
  
  <blockquote>
    <p>In C++, we often use polymorphism to allow old code to handle new
    code--for instance, as long as we subclass the interface expected by a
    function, we can pass in the new class and expect it to work correctly
    with the code that was written before the new class ever existed.
    Unfortunately, with enums, you can't really do this, even though there
    are occasional times you'd like to. (For instance, if you were
    managing the settings for your program and you stored all of them as
    enum values, then it might be nice to have an enum, settings_t, from
    which all of your other enums inherited so that you could store every
    new enum in the settings list. Note that since the list contains
    values of different types, <strong>you can't use templates</strong>.)</p>
    
    <p>If you need this kind of behavior, you're forced to store the enums as
    integers and then retrieve them using typecasts to assign the
    particular value to the setting of interest. And you won't even get
    the benefit of dynamic_cast to help you ensure that the cast is
    safe--you'll have to rely on the fact that incorrect values cannot be
    stored in the list.</p>
  </blockquote>
  
  <p>I'm quoting from a <a href="http://www.cprogramming.com/tutorial/enum.html" rel="nofollow">C++ programming tutorial</a>.</p>
  
  <p>Can anybody please explain more deeply and with some examples how Polymorphic Enums work?
  And in the case I have templates?</p>