title: namespaces for enum types - best practices
body: <p>Often, one needs several enumerated types together.  Sometimes, one has a name clash.  Two solutions to this come to mind: use a namespace, or use 'larger' enum element names.  Still, the namespace solution has two possible implementations: a dummy class with nested enum, or a full blown namespace.</p>
  
  <p>I'm looking for pros and cons of all three approaches.</p>
  
  <p>Example:</p>
  
  <pre><code>// oft seen hand-crafted name clash solution
  enum eColors { cRed, cColorBlue, cGreen, cYellow, cColorsEnd };
  enum eFeelings { cAngry, cFeelingBlue, cHappy, cFeelingsEnd };
  void setPenColor( const eColors c ) {
      switch (c) {
          default: assert(false);
          break; case cRed: //...
          break; case cColorBlue: //...
          //...
      }
   }
  
  
  // (ab)using a class as a namespace
  class Colors { enum e { cRed, cBlue, cGreen, cYellow, cEnd }; };
  class Feelings { enum e { cAngry, cBlue, cHappy, cEnd }; };
  void setPenColor( const Colors::e c ) {
      switch (c) {
          default: assert(false);
          break; case Colors::cRed: //...
          break; case Colors::cBlue: //...
          //...
      }
   }
  
  
   // a real namespace?
   namespace Colors { enum e { cRed, cBlue, cGreen, cYellow, cEnd }; };
   namespace Feelings { enum e { cAngry, cBlue, cHappy, cEnd }; };
   void setPenColor( const Colors::e c ) {
      switch (c) {
          default: assert(false);
          break; case Colors::cRed: //...
          break; case Colors::cBlue: //...
          //...
      }
    }
  </code></pre>