Amore di template, ma ho intenzione di prendere nota di questo per il mio futuro/uso di altre persone, quindi non siamo persi con nessuno dei precedenti.
Le enumerazioni sono convenienti per il confronto di cose in modo noto e ordinato. In genere vengono utilizzati con codifica hard in funzioni per motivi di leggibilità rispetto ai valori interi. Un po 'simile alle definizioni del preprocessore, con l'eccezione che non vengono sostituiti con letterali, ma mantenuti e accessibili in runtime.
Se avessimo un enum che definisce i codici di errore html e sapevamo che i codici di errore nelle 500s sono errori del server, potrebbe essere più bello di leggere qualcosa di simile:
enum HtmlCodes {CONTINUE_CODE=100,CLIENT_ERROR=400,SERVER_ERROR=500,NON_STANDARD=600};
if(errorCode >= SERVER_ERROR && errorCode < NON_STANDARD)
di
if(errorCode >= 500 && errorCode < 600)
La parte fondamentale è questa, sono simili agli array! Ma sono utilizzati percastvalori interi.
breve esempio:
enum Suit {Diamonds, Hearts, Clubs, Spades};
//does something with values in the enum past "Hearts" in this case
for(int i=0;i<4;i++){
//Could also use i or Hearts, because the enum will turns these both back into an int
if((Suit)(i) > 1)
{
//Whatever we'd like to do with (Suit)(i)
}
}
Spesso enumerazioni sono utilizzati anche con char * array o array di stringhe in modo da poter stampare qualche messaggio con il valore associato. Normalmente sono solo le matrici con lo stesso insieme di valori nella enum, in questo modo:
char* Suits[4] = {"Diamonds", "Hearts", "Clubs", "Spades"};
//Getting a little redundant
cout << Suits[Clubs] << endl;
//We might want to add this to the above
//cout << Suits[(Suit)(i)] << endl;
E, naturalmente, è ancora più bello per creare una classe generica che gestisce l'iterazione per enumerazioni come le risposte di cui sopra.
Come si suppone di selezionare la funzione per la chiamata? Potresti postare qualche pseudo codice come pensi di farlo? Potrebbe aiutarci ad aiutarti. –
aggiornato per krill – jameszhao00
Per runtime, consultare http://stackoverflow.com/questions/1292426/is-there-any-well-known-paradigm-for-iterating-through-enum. (Se non fosse in fase di compilazione, la tua domanda sarebbe un duplicato esatto.) – sbi