Я хотел бы создать составной тип из двух 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
.
Я хотел бы знать, как наилучшим образом реализовать этот тип составных типов в С++ 11. Является ли определение класса enum достаточно сильным или необходимо сказать:?
enum class Color {RED=0, GREEN=1, BLUE=2};
enum class Shape {SQUARE=0, CIRCLE=1, TRIANGLE=2};