考虑一个C++类,它导出一个枚举,在该枚举上维护一个内部数组,并且想要导出一个接受枚举值的命令。控制枚举值的可见性
class foo {
public:
enum color {
red,
yellow,
green,
NUM_COLORS
};
private:
something somebody[NUM_COLORS];
public:
void command(color c);
};
是否有一种干净的方式只导出实际颜色,而不是NUM_COLORS?我不想在每次调用时检查边缘情况,因为编译器的类型系统真的应该能够为我做。
明显的黑客是:
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);
};
这当然是一个定时炸弹,等待一些穷人过度劳累维护程序员加入对蓝光LED的规定,并且忘记更新NUM_COLORS线。
让我澄清一下。在这种情况下,我想要说的是:
class foo {
public:
enum color {
red,
yellow,
green
};
void command(color c);
private:
something somebody[color];
};
这是我的理解,C++不允许这样做。
据我所知,你试图做的事情是不可能的。想到的下一个最好的事情是非常努力地按住shift键,并在枚举之下写一个非常重要的注释。 – 2011-04-01 16:46:33
编译器不会帮你从愚蠢的。无论如何,有人可以很容易地写foo :: color(7)。 – 2011-04-01 17:08:54