2008-10-01 18 views

Respuesta

70

No, no hay forma de encontrar los valores máximos y mínimos definidos 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 ser nombrado valores para cada valor entre First y Last.

+2

Sigue siendo útil para enumeraciones no secuenciales, siempre que no espere que exista cada valor –

+0

@Adrian: Sí, eso es cierto. No necesita todos los valores para tener un nombre definido para que esta técnica sea útil. Voy a editar en consecuencia –

22

No, no en C++ estándar. Usted puede hacerlo de forma manual:

enum Name 
{ 
    val0, 
    val1, 
    val2, 
    num_values 
}; 

num_values contendrá el número de valores de la enumeración.

+0

num_values ​​contendrá los números-1 de los valores – 4pie0

+9

@lizusek: 'num_values' contendrá el número de valores en la enumeración, excepto' num_values'. – dalle

+3

@dalie sí, por eso será: número de valores - 1. Por supuesto que sé que te refieres a valores que significan valores que excluyen el último, que no es un valor real, sino un ayudante. Sin embargo, sugeriría que sea más claro. – 4pie0

4

No. Una enumeración en C o C++ es simplemente una lista de constantes. No hay una estructura más alta que pueda contener dicha información.

Por lo general, cuando necesito este tipo de información que se incluyen en la enumeración un valor máximo y mínimo o menos así:

enum { 
    eAaa = 1, 
    eBbb, 
    eCccc, 
    eMin = eAaaa, 
    eMax = eCccc 
} 

Ver esta página web para algunos ejemplos de cómo esto puede ser útil: Stupid Enum Tricks

3
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

-2

que ni siquiera los necesita, lo que hago es que acabo de decir, por ejemplo si tiene:

enum Name{val0,val1,val2}; 

si tiene sentencia switch y para comprobar si se ha alcanzado el último valor de hacer lo siguiente:

if(selectedOption>=val0 && selectedOption<=val2){ 

    //code 
} 
+8

Esta es una solución muy frágil. Si agrega un nuevo valor enum, tiene que encuestar todo su código base para actualizar dichas pruebas. –

Cuestiones relacionadas