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.


  • Prima possibilità

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);
}

  • Seconda possibilità



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.