我想从两个中创建一个复合类型enum classes
。
enum class Color {RED, GREEN, BLUE};
enum class Shape {SQUARE, CIRCLE, TRIANGLE};
class Object {
Color color;
Shape shape;
public:
};
为了Object
在 STL 容器中使用,std::map<>
我需要重载小于运算符。但是,为了将两个枚举类扁平化为一个线性索引,我不知何故需要枚举类的元素数(NoE):
friend bool operator< (const Object &lhs, const Object &rhs) {
return NoE(Shape)*lhs.color+lhs.shape < NoE(Shape)*rhs.color+rhs.shape;
}
如果不以一种很好的方式在程序的两个位置输入相同的信息(元素数量),如何做到这一点?(好方法意味着不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};