В моем проекте у меня есть несколько перечислений enum, подобных этому;Объединить перечисления C++
enum Comparison
{
LT, // "<"
GT, // ">"
EQ, // "=="
LTEQ, // "<="
GTEQ, // ">="
NEQ // "!="
};
enum Arithmetic
{
ADD, // "+"
SUB, // "-"
MUL, // "*"
DIV, // "/"
MOD, // "%"
};
И я хотел бы объединить несколько из них в единый комбинированный перечислитель, такой, что;
- Все элементы (из под-перечислений) присутствуют в комбинированном перечислении.
- Все элементы имеют уникальное значение (очевидно).
- Все элементы имеют согласованное значение в объединенном перечислении и оригинале.
Как это:
enum Comparison
{
LT, // "<"
GT, // ">"
EQ, // "=="
LTEQ, // "<="
GTEQ, // ">="
NEQ // "!="
ADD, // "+"
SUB, // "-"
MUL, // "*"
DIV, // "/"
MOD, // "%"
};
Кроме того, что я хотел бы быть в состоянии сделать, чтобы «бросить» комбинированное перечисление, к одному из оригинальных, учитывая значение в сочетании только перечисление (должно быть тривиально, если значения согласованы).
Альтернатива перечислению - это решение класса, где классы реализуют оператор operator int()
.
Примечание; Я верю, что operator int()
- это как-то путь.
Что происходит, когда два элемента имеет одинаковое значение в различных 'enum's ? – Jacob
Я не явным образом присваиваю значения любым элементам, я хотел, чтобы компилятор обрабатывал это автоматически, если это было возможно. Мое текущее «исправление» - это просто назначить первый элемент в каждом перечислении, на значение последнего элемента в предыдущем перечислении (+1). - Однако я не считаю это приятным вообще. – Skeen
Почему вы хотите иметь несколько перечислений, а также переименование 'master'? – Kindread