我想用两个创建一个复合类型enum classes.
enum class Color {RED, GREEN, BLUE};
enum class Shape {SQUARE, CIRCLE, TRIANGLE};
class Object {
Color color;
Shape shape;
public:
};
Run Code Online (Sandbox Code Playgroud)
为了Object在STL容器中使用,std::map<>我需要重载less-than运算符.但是,为了将两个枚举类压缩成一个线性索引,我不知何故需要枚举类的元素数(NoE):
friend bool operator< (const Object &lhs, const Object &rhs) {
return NoE(Shape)*lhs.color+lhs.shape < NoE(Shape)*rhs.color+rhs.shape;
}
Run Code Online (Sandbox Code Playgroud)
如果不以一种很好的方式在程序中的两个位置输入相同的信息(元素数量),怎么做呢?(好的方式意味着没有FIRST_ELEMENT, LAST_ELEMENT,预处理器魔术等)
问题(枚举中的元素数量)类似但未解决enum classes.
我想知道在C++ 11中实现这种复合类型的最佳方法是什么.枚举类定义是否足够强大,还是有必要说:?
enum class Color {RED=0, GREEN=1, BLUE=2};
enum class Shape {SQUARE=0, CIRCLE=1, TRIANGLE=2};
Run Code Online (Sandbox Code Playgroud)