Jednym z powodów, dla których mógłbym chcieć poznać maksymalną wartość wyliczenia bez dodawania jej do samego wyliczenia, jest to, że mój kompilator nie narzeka (C4061), gdy moja instrukcja „switch” nie obsługuje jawnie wartości „max value”.
snips-n-snails
Odpowiedzi:
96
Nie, nie ma sposobu, aby znaleźć maksymalne i minimalne zdefiniowane wartości dowolnego wyliczenia w C ++. Kiedy tego rodzaju informacje są potrzebne, często dobrą praktyką jest zdefiniowanie wartości Last i First. Na przykład,
enumMyPretendEnum
{
Apples,
Oranges,
Pears,
Bananas,
First = Apples,
Last = Bananas
};
Nie ma potrzeby nadawania nazw wartościom dla każdej wartości z przedziału od Firstdo Last.
@lizusek: num_valuesbędzie zawierał liczbę wartości w wyliczeniu, z wyjątkiem num_valuessiebie.
dalle
3
@dalie tak, dlatego będzie to: liczba wartości - 1. Oczywiście wiem, że masz na myśli wartości, które oznaczają wartości wykluczające ostatnią, która nie jest wartością rzeczywistą, ale pomocnikiem. Sugerowałbym jednak, aby było to jaśniejsze.
4pie0
1
@dalle Tylko jeśli val0 = 0
user2470258
@ user2470258, jak zdefiniowano powyżej, zawsze wynosi 0.
dalle
6
Nie. Wyliczenie w C lub C ++ to po prostu lista stałych. Nie ma wyższej struktury, która przechowała takie informacje.
Zwykle, gdy potrzebuję tego rodzaju informacji, dołączam do wyliczenia wartości maksymalne i minimalne, mniej więcej tak:
artykuł, do którego odsyłasz, pochodzi z czasów, w których kompilator autorów „nie obsługuje nowego oficjalnego typu boolowskiego C ++” .... Nigdy wcześniej nie czytałem czegoś tak starożytnego: P.
Nie automatycznie, ale możesz dodać sztuczne wartości wyliczenia, aby oznaczyć wartości minimalne i maksymalne, np
typedefenum {start_of_colors=-1, eRed, eWhite, eBlue, eGray,
end_of_colors} eListOfTags;
for (eListOfTags i = start_of_colors+1; i < end_of_colors; i++) {
....
}
Odpowiedzi:
Nie, nie ma sposobu, aby znaleźć maksymalne i minimalne zdefiniowane wartości dowolnego wyliczenia w C ++. Kiedy tego rodzaju informacje są potrzebne, często dobrą praktyką jest zdefiniowanie wartości Last i First. Na przykład,
enum MyPretendEnum { Apples, Oranges, Pears, Bananas, First = Apples, Last = Bananas };
Nie ma potrzeby nadawania nazw wartościom dla każdej wartości z przedziału od
First
doLast
.źródło
Nie, nie w standardowym C ++. Możesz to zrobić ręcznie:
enum Name { val0, val1, val2, num_values };
num_values
będzie zawierać liczbę wartości w wyliczeniu.źródło
num_values
będzie zawierał liczbę wartości w wyliczeniu, z wyjątkiemnum_values
siebie.Nie. Wyliczenie w C lub C ++ to po prostu lista stałych. Nie ma wyższej struktury, która przechowała takie informacje.
Zwykle, gdy potrzebuję tego rodzaju informacji, dołączam do wyliczenia wartości maksymalne i minimalne, mniej więcej tak:
enum { eAaa = 1, eBbb, eCccc, eMin = eAaaa, eMax = eCccc }
Zobacz tę stronę internetową, aby zobaczyć kilka przykładów tego, jak to może być przydatne: Stupid Enum Tricks
źródło
enum My_enum { FIRST_VALUE = 0, MY_VALUE1, MY_VALUE2, ... MY_VALUEN, LAST_VALUE };
po definicji My_enum :: LAST_VALUE == N + 1
źródło
Nie automatycznie, ale możesz dodać sztuczne wartości wyliczenia, aby oznaczyć wartości minimalne i maksymalne, np
typedef enum {start_of_colors=-1, eRed, eWhite, eBlue, eGray, end_of_colors} eListOfTags; for (eListOfTags i = start_of_colors+1; i < end_of_colors; i++) { .... }
źródło
nawet ich nie potrzebujesz, ja tylko mówię, jeśli masz na przykład:
enum Name{val0,val1,val2};
jeśli masz instrukcję switch i aby sprawdzić, czy ostatnia wartość została osiągnięta, wykonaj następujące czynności:
if(selectedOption>=val0 && selectedOption<=val2){ //code }
źródło