【发布时间】:2011-07-27 20:11:42
【问题描述】:
考虑一个导出枚举的 C++ 类,在该枚举上维护一个内部数组,并希望导出一个接受枚举值的命令。
class foo {
public:
enum color {
red,
yellow,
green,
NUM_COLORS
};
private:
something somebody[NUM_COLORS];
public:
void command(color c);
};
有没有一种干净的方法可以只导出实际颜色,而不是 NUM_COLORS?当编译器的类型系统真的应该能够为我做这件事时,我不想在每次调用时都检查边缘情况。
明显的 hack 是:
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 键并在枚举下方写一个非常重要的评论。
-
编译器不会帮助你摆脱愚蠢。无论如何,有人可以很容易地写出 foo::color(7)。
标签: c++ arrays enums visibility