Programming - cpueblo.com

Intelligent 'enum's in C++ Applications (영문)


글쓴이 : 유광희 날짜 : 2002-05-13 (월) 16:39 조회 : 6874
On several occasions in the past I have found C++ enumerations lacking. 
Enums need an automatic default and Enums need string functionality along with the integer value, 
particularily in applications that interact with a user either on a GUI or in an error message. 

I thus concieved the idea to represent Enums as C++ classes which provide all the standard functionality of an enum, 
by overiding the relevant operators. And then adding the extra functionality desired. 

Rather than writing these classes, a utility which translates standard Enum declerations to such classes would be great. 
Along with the idea, I have supplied a utility EC (enum compiler) that will do the job on Microsoft platforms. 

In other words if I supply the following: 


  enum EState
  {
    Unknown = 0,
    Solid = 1,  // Solid Matter
    Liquid = 2, // "Liquid Matter "
    Gas,        
  };

One could generate a class as follows: 
  class EState
  {
  public:
   // EState::Unknown,Solid,Liquid,Gas,
   enum Enum
   {
     Unknown = 0,
     Solid   = 1,  // "Solid Matter"
     Liquid  = 2,  // "Liquid Matter "
     Gas,          // "Vapour"
   };

   Enum operator=(int i);
   operator int () const;

   Enum operator=(const char* sz);
   bool operator==(const char* sz);
   operator const char* () const;

   ...
  };

  EState::Map_t EState::m_Map[] =
  {
      {Unknown, "Unknown"},
      {Solid,   "Solid Matter"},
      {Liquid,  "Liquid Matter "},
      {Gas,     "Vapour"}
  };


which could then be used as an "intelligent" Enum. 
These "intelligent" Enums can be used as follows: 


  int X;
  ...
  EState eState;
  eState = X;
  if(eState == EState::Unknown) {...}
  ...
  printf("eState is '%s' [%d]", (const char*)eState, eState);
  ...
  eState = "Text String";
  if(eState == EState::Unknown) ...
  ...
making some parts of coding simpler and more understandable.