Intelligent ‘enum’s in C++ Applications

Environment: C++

Keywords: Enumerations, strings, integers, automatic defaults.

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, /* Vapour */
};

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.

Downloads


Download EnumCompiler utility(Microsoft) and demo project – 16 Kb

More by Author

Must Read