【发布时间】:2010-12-10 10:40:22
【问题描述】:
理想情况下,我希望以下示例能够正常工作,但我想其中一些示例无法在 C++ 中实现。
{
typedef StrongEnum<Red=0, Green=1, Blue=2> Color; // not a C++ syntax
Color c = Color::Red; // static const
Color d; //error: default constructor is private
Color d = c;
Color e = Color::OfInt(5); // ifdef DEBUG - Runtime error: Enum out of range
int sum = 0;
// I do have these macros, but separate for each enum - FOREACH_COLOR(c)
FOREACH_ENUM (Color c) {
sum += c.ToInt ();
}
ArrayMap<Color, string> map; // Internally this is const size array, possible
map [Color::Red] = "red"; // because Color have static const Limit = 3 inisde.
// Advanced: EnumPair does bitpacking.
// currently I implement it manually for every pair of Enum's I need.
typedef EnumPair <door=Color, window=Color> ColorPair; // I guess I can't get this, can I?
ColorPair pair (door = Color::Red, window = Color::Green); // I guess I can't give the labels here or one line above, can I?
Color w = pair.window;
Color w = pair.window ();
}
我经常使用它们,目前我从头开始编写每一个。 我知道一个完整的通用解决方案是一个梦想,所以我欢迎任何部分解决方案。 也许有人创建了一个库或代码生成器?
更新 1:
【问题讨论】:
-
但是partial并不意味着实现上面的Color类。这意味着部分泛型 Enum 以避免一遍又一遍地重新实现相同的方法。
-
您在寻找安全标签吗? artima.com/cppsource/safelabels.html
-
是的,我知道 C++0x 中的枚举类,但它本身并不能解决我的问题。