Мне нравится создавать шаблоны, но я собираюсь отметить это для использования в будущем / другими людьми, чтобы мы не потерялись ни с одним из вышеперечисленных.
Перечисления удобны для сравнения вещей известным упорядоченным способом. Как правило, они жестко встроены в функции для удобства чтения целочисленных значений. В чем-то похожи на определения препроцессора, за исключением того, что они не заменяются литералами, а сохраняются и доступны во время выполнения.
Если бы у нас было перечисление, определяющее коды ошибок html, и мы знали, что коды ошибок в 500 - это ошибки сервера, было бы лучше прочитать что-то вроде:
enum HtmlCodes {CONTINUE_CODE=100,CLIENT_ERROR=400,SERVER_ERROR=500,NON_STANDARD=600};
if(errorCode >= SERVER_ERROR && errorCode < NON_STANDARD)
чем
if(errorCode >= 500 && errorCode < 600)
Ключевой момент в том, что они похожи на массивы! Но используются для преобразования целочисленных значений.
Краткий пример:
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)
}
}
Часто перечисления также используются с массивами char * или строковыми массивами, чтобы вы могли распечатать какое-либо сообщение со связанным значением. Обычно это просто массивы с тем же набором значений в перечислении, например:
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;
И, конечно, еще лучше создать общий класс, который обрабатывает итерацию для перечислений, подобных приведенным выше ответам.
person
TheUnknownGeek
schedule
12.11.2014