Una razón por la que podría querer saber el valor máximo de una enumeración sin agregarla a la enumeración en sí es para que mi compilador no se queje (C4061) cuando mi declaración 'switch' no maneja explícitamente el valor del "valor máximo".
snips-n-snails
Respuestas:
94
No, no hay forma de encontrar los valores definidos máximo y mínimo de cualquier enumeración en C ++. Cuando se necesita este tipo de información, a menudo es una buena práctica definir un valor Último y Primero. Por ejemplo,
enum MyPretendEnum
{
Apples,
Oranges,
Pears,
Bananas,
First = Apples,
Last = Bananas
};
No es necesario nombrar valores para cada valor entre Firsty Last.
num_values contendrá los números-1 de los valores
4pie0
12
@lizusek: num_valuescontendrá el número de valores en la enumeración, excepto él num_valuesmismo.
dalle
3
@dalie sí, es por eso que será: número de valores - 1. Por supuesto que sé que te refieres a valores que significan valores excluyendo el último que no es un valor real, sino un ayudante. Sin embargo, sugeriría hacerlo más claro.
4pie0
1
@dalle Solo si val0 = 0
user2470258
@ user2470258 como se define arriba, siempre es 0.
dalle
6
No. Una enumeración en C o C ++ es simplemente una lista de constantes. No existe una estructura superior que contenga tal información.
Por lo general, cuando necesito este tipo de información, incluyo en la enumeración un valor máximo y mínimo como esto:
el artículo que enlaza es de una época en la que el compilador de los autores "no es compatible con el nuevo tipo booleano oficial de C ++" ... Nunca había leído algo tan antiguo antes: P.
No automáticamente, pero puede agregar valores de enumeración artificiales para indicar valores mínimos y máximos, por ejemplo
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++) {
....
}
Respuestas:
No, no hay forma de encontrar los valores definidos máximo y mínimo de cualquier enumeración en C ++. Cuando se necesita este tipo de información, a menudo es una buena práctica definir un valor Último y Primero. Por ejemplo,
enum MyPretendEnum { Apples, Oranges, Pears, Bananas, First = Apples, Last = Bananas };
No es necesario nombrar valores para cada valor entre
First
yLast
.fuente
No, no en C ++ estándar. Podrías hacerlo manualmente:
enum Name { val0, val1, val2, num_values };
num_values
contendrá el número de valores en la enumeración.fuente
num_values
contendrá el número de valores en la enumeración, excepto élnum_values
mismo.No. Una enumeración en C o C ++ es simplemente una lista de constantes. No existe una estructura superior que contenga tal información.
Por lo general, cuando necesito este tipo de información, incluyo en la enumeración un valor máximo y mínimo como esto:
enum { eAaa = 1, eBbb, eCccc, eMin = eAaaa, eMax = eCccc }
Consulte esta página web para ver algunos ejemplos de cómo esto puede ser útil: Trucos estúpidos de enumeración
fuente
enum My_enum { FIRST_VALUE = 0, MY_VALUE1, MY_VALUE2, ... MY_VALUEN, LAST_VALUE };
después de la definición, My_enum :: LAST_VALUE == N + 1
fuente
No automáticamente, pero puede agregar valores de enumeración artificiales para indicar valores mínimos y máximos, por ejemplo
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++) { .... }
fuente
ni siquiera los necesitas, lo que hago es solo digo por ejemplo si tienes:
enum Name{val0,val1,val2};
si tiene una declaración de cambio y para verificar si se alcanzó el último valor, haga lo siguiente:
if(selectedOption>=val0 && selectedOption<=val2){ //code }
fuente