Enum¶
Tipi, deklarirani z besedo enum so posebni tipi, ki predstavljajo naštevanje (enumeration) neke končne skupne možnosti. Običajne enum-e se definira preprosto tako, da naštejemo vse možnosti:
enum Color { RED, YELLOW, GREEN };
Sedaj lahko tip Color uporabljamo kot običajen tip, le da ima lahko le tri vrednosti:
Color c = RED;
if (c == GREEN) {
...
}
Zelo pogosto se enum-e uporablja v povezavi s switch stavkom:
switch (c) {
case RED: ...; break;
case YELLOW: ...; break;
case YELLOW: ...; break;
}
Tu se lahko za vsako izmed končno mnogo možnosti odločimo, kaj bomo naredili, prevajalnik pa nas posvari, če smo katero pozabili.
S C++11 so prišli tudi t. i. scoped enumerations, ki se jih definira podobno, s kombinacijo enum class:
enum class Color { RED, YELLOW, GREEN };
razlika pa je, da moramo pri uporabi njihovih vrednostih pisati tip, ki mu vrednosti pripadajo (zato scoped)
Color c = Color::RED;
Prav tako lahko določimo kateri tip se v ozadju uporabi za vrednosti. Pri stari verziji je to vedno int (in možnosti se začnejo šteti od 0 naprej, če ne povemo drugače), pri novejšh, pa lahko izberemo drug tip, kot npr. char:
enum class Color : char { RED, YELLOW, GREEN };
Še ena razlika je, da se novejši enumi se ne morejo avtomatsko pretvoriti v svoj implementacijski tip, starejši pa se lahko.
int c = RED; // ok
char b = Color::RED; // error: cannot convert ‘Color’ to ‘char’ in initialization