Considere una clase C++ que exporta una enumeración, mantiene una matriz interna sobre esa enumeración, y desea exportar un comando que acepte valores de la enumeración.Controlando la visibilidad de los valores enum
class foo {
public:
enum color {
red,
yellow,
green,
NUM_COLORS
};
private:
something somebody[NUM_COLORS];
public:
void command(color c);
};
¿Hay una manera limpia de exportar solo los colores reales, pero no NUM_COLORS? No quiero tener que buscar el caso límite en cada llamada cuando el sistema de tipo de compilación realmente debería poder hacerlo por mí.
El truco es obvia:
class foo {
public:
enum color {
red,
yellow,
green
};
private:
/* something like */ const unsigned NUM_COLORS = green+1;
unsigned LEDs_in_stock[NUM_COLORS];
public:
void command(color c);
};
Por supuesto, esto es una bomba de tiempo, a la espera de algún pobre programador de mantenimiento con exceso de trabajo para agregar disposiciones para los LEDs azules, y se olvidan de actualizar la línea NUM_COLORS.
Déjenme aclarar un poco. Lo que yo quiero, en este caso particular, es ser capaz de decir:
class foo {
public:
enum color {
red,
yellow,
green
};
void command(color c);
private:
something somebody[color];
};
Es mi entendimiento de que C++ no permite esto.
Hasta donde yo sé, lo que estás tratando de hacer no es realmente posible. Lo siguiente que viene a la mente es mantener presionada la tecla Mayús y escribir un COMENTARIO MUY IMPORTANTE debajo de la enumeración. –
El compilador no lo ayudará desde el estúpido. Alguien podría escribir fácilmente foo :: color (7) de todos modos. –