Ein Grund, warum ich den Maximalwert einer Aufzählung wissen möchte, ohne ihn zur Aufzählung selbst hinzuzufügen, ist, dass sich mein Compiler nicht beschwert (C4061), wenn meine Anweisung 'switch' den Wert "Maximalwert" nicht explizit verarbeitet.
Snips-n-
Antworten:
95
Nein, es gibt keine Möglichkeit, die maximal und minimal definierten Werte einer Aufzählung in C ++ zu finden. Wenn diese Art von Informationen benötigt wird, empfiehlt es sich häufig, einen letzten und einen ersten Wert zu definieren. Zum Beispiel,
enumMyPretendEnum
{
Apples,
Oranges,
Pears,
Bananas,
First = Apples,
Last = Bananas
};
Es müssen nicht für jeden Wert zwischen Firstund benannte Werte angegeben werden Last.
Immer noch nützlich für nicht-sequentielle Aufzählungen - solange Sie nicht erwarten, dass jeder Wert existiert
Adrian Cornish
@Adrian: Ja, das ist wahr. Sie müssen nicht für jeden Wert einen definierten Namen haben, damit diese Technik nützlich ist. Ich werde entsprechend bearbeiten
Jeff Yates
ok, aber du musst seinen Wert beibehalten, wenn neue hinzugefügt werden.
Matt
30
Nein, nicht in Standard C ++. Sie können es manuell tun:
enumName
{
val0,
val1,
val2,
num_values
};
num_values enthält die Anzahl der Werte in der Aufzählung.
@lizusek: Enthält num_valuesdie Anzahl der Werte in der Aufzählung, außer sich num_valuesselbst.
dalle
3
@dalie ja, deshalb wird es sein: Anzahl der Werte - 1. Natürlich weiß ich, dass Sie einen Wert meinen, der Werte ohne den letzten bedeutet, der kein realer Wert, sondern ein Helfer ist. Ich würde jedoch vorschlagen, es klarer zu machen.
4pie0
1
@dalle Nur wenn val0 = 0
user2470258
@ user2470258 wie oben definiert ist es immer 0.
dalle
6
Nein. Eine Aufzählung in C oder C ++ ist einfach eine Liste von Konstanten. Es gibt keine höhere Struktur, die solche Informationen enthalten würde.
Wenn ich diese Art von Informationen benötige, füge ich normalerweise einen Max- und Min-Wert wie folgt in die Aufzählung ein:
Der Artikel, den Sie verlinken, stammt aus einer Zeit, in der der Autoren-Compiler "den neuen offiziellen C ++ - Booleschen Typ nicht unterstützt". Ich habe noch nie etwas so Altes gelesen: P.
Nicht automatisch, aber Sie können künstliche Aufzählungswerte hinzufügen, um Min- und Max-Werte zu kennzeichnen, z
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++) {
....
}
Dies ist eine sehr fragile Lösung. Wenn Sie einen neuen Aufzählungswert hinzufügen, müssen Sie Ihre gesamte Codebasis untersuchen, um solche Tests zu aktualisieren.
Antworten:
Nein, es gibt keine Möglichkeit, die maximal und minimal definierten Werte einer Aufzählung in C ++ zu finden. Wenn diese Art von Informationen benötigt wird, empfiehlt es sich häufig, einen letzten und einen ersten Wert zu definieren. Zum Beispiel,
enum MyPretendEnum { Apples, Oranges, Pears, Bananas, First = Apples, Last = Bananas };
Es müssen nicht für jeden Wert zwischen
First
und benannte Werte angegeben werdenLast
.quelle
Nein, nicht in Standard C ++. Sie können es manuell tun:
enum Name { val0, val1, val2, num_values };
num_values
enthält die Anzahl der Werte in der Aufzählung.quelle
num_values
die Anzahl der Werte in der Aufzählung, außer sichnum_values
selbst.Nein. Eine Aufzählung in C oder C ++ ist einfach eine Liste von Konstanten. Es gibt keine höhere Struktur, die solche Informationen enthalten würde.
Wenn ich diese Art von Informationen benötige, füge ich normalerweise einen Max- und Min-Wert wie folgt in die Aufzählung ein:
enum { eAaa = 1, eBbb, eCccc, eMin = eAaaa, eMax = eCccc }
Auf dieser Webseite finden Sie einige Beispiele, wie dies nützlich sein kann: Dumme Aufzählungstricks
quelle
enum My_enum { FIRST_VALUE = 0, MY_VALUE1, MY_VALUE2, ... MY_VALUEN, LAST_VALUE };
Nach der Definition ist My_enum :: LAST_VALUE == N + 1
quelle
Nicht automatisch, aber Sie können künstliche Aufzählungswerte hinzufügen, um Min- und Max-Werte zu kennzeichnen, z
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++) { .... }
quelle
du brauchst sie nicht einmal, was ich tue, ist nur, dass ich zum Beispiel sage, wenn du hast:
enum Name{val0,val1,val2};
Wenn Sie eine switch-Anweisung haben und prüfen möchten, ob der letzte Wert erreicht wurde, gehen Sie wie folgt vor:
if(selectedOption>=val0 && selectedOption<=val2){ //code }
quelle