Creo la classe in cui definisco un "enum"
codice:
class Classe
{
public:
//quello che serve
enum NuovoEnum:unsigned int{primo,secondo,terzo};
//altro che serve
}
poi creo un'altra classe, in cui uno dei metodi ha bisogno come parametro il valore di NuovoEnum definito in Classe.
codice:
class AltraClasse
{
public:
//quello che serve
void metodoDiAltraClasse(Classe::NuovoEnum enum /*altri eventuali parametri);
}
ma se il metodo viene richiamato all'interno di un ciclo for, detto "oggetto" l'istanza di AltraClasse devo fare
codice:
for(unsigned int i=0;i<numero_cicli;i++)
{
Classe::NuovoEnum parametro=Classe::NuovoEnum(i);
oggetto.metodoDiAltraClasse(parametro);
}
codice:
class AltraClasse
{
public:
//quello che serve
void metodoDiAltraClasse(unsigned int enum /*altri eventuali parametri);
}
e nella definizione di metodoDiAltraClasse avrò
codice:
AltraClasse::metodiDiAltraClasse(unsigned int enum)
{
Classe::NuovoEnum nuovo_enum=Classe::NuovoEnum(enum);
//altre cose che fa il metodo
}
quindi, se la richiamo in un ciclo for diventa
codice:
for(unsigned int i=0;i<numero_cicli;i++)
{
oggetto.metodoDiAltraClasse(i);
//altre cose...
}
La domanda molto semplicemente è: cosa è meglio?
Io propenderei per la prima, in quanto "obbligo" a passare un dato che è del tipo predefinito per il metodo.
L'altra domanda, come faccio a cautelarmi dal passare valori che in realtà il mio enum non contempla? In altre parole, nel momento della compilazione, come posso verificare che i valori siano veramente definiti dall'enum in questione?
Nell'esempio sopra, i valori ammissibili sono 0,1 e 2, se il ciclo arriva a 3, come faccio a dire che se i è maggiore del max valore di enum, interrompi il ciclo? é anche vero che uso un ciclo for, è perchè so già il numero di cicli, ma qualche errore può sempre scappare...
Grazie.