sabato 6 febbraio 2010

Enum in C++

A differenza di altri linguaggi più moderni, in C++ i valori dei tipi enumerati non sono racchiusi dal namespace del tipo; ad esempio, in C++:

typedef enum { A, B, C } AutomaState;

....

AutomaState automaState( A );
...
automaState = B;
...
if ( automaState == C ) ...
Qui si definisce un enumerato AutomaState, a cui sono associati gli stati A, B e C. La sintassi non è particolarmente chiara, e non c'è nessun "legame" tra il nome AutomaState ed i suoi stati...

Racchiudendo invece in un namespace la definizione del tipo, si riesce ad ottenere un risultato molto più elegante:




namespace AutomaState
{
        typedef enum { A, B, C } type;
}

...

AutomaState::type myAutoma( AutomaState::A );
...
myAutoma = AutomaState::B;
...
if ( myAutoma == AutomaState::C ) ...


Utilizzando poi come standard il nome type per la definizione del tipo, si rende l'utilizzo del costrutto intuitivo e uniforme.

1 commento:

estimatore ha detto...

post per niente chiaro. a che cavolo serve enum??????