У меня есть следующий enum класс:
enum class MyEnum : int32_t
{
ENUM1 = EXTERNAL_CONSTANT1,
ENUM2 = EXTERNAL_CONSTANT2,
ENUM3 = EXTERNAL_CONSTANT3
};
«EXTERNAL_CONSTANTX» являются константами, предоставляемыми из других источников (которые представляют собой более или менее специальные кодовые номера).
Что я хочу сделать, так это иметь возможность сравнивать перечисления по приоритету, который указан в другом документе, например, ENUM3 имеет самый высокий приоритет, ENUM2 имеет самый низкий (он полностью не коррелирует со значениями EXTERNAL_CONSTANT). Насколько я проверял, C ++ не позволяет получить индекс определенного перечисления, поэтому я мог бы упорядочить их так, как должны применяться их приоритеты. Мой подход заключается в использовании вектора перечислений, в котором все они имеют определенный приоритет, но я думаю, что это не лучший расширяемый подход.
Есть ли лучший подход к проблеме, которую я описал? заранее спасибо
Да, порядок, используемый для объявления элементов enum, не имеет значения, пока вы явно присваиваете каждому значение (не +1 к предыдущему), этот порядок теряется, и вы должны управлять им самостоятельно, если вам нужно.
Мой подход заключается в использовании вектора перечислений, в котором все они имеют определенный приоритетный порядок если я хорошо понимаю, что для сравнения приоритета двух элементов перечисления вам придется пройти через этот вектор, и первый найденный элемент перечисления будет иметь более низкий приоритет (или более высокий, в зависимости от порядка их размещения)? Это довольно дорого.
Что вы используете чаще всего, EXTERNAL_CONSTANTi или enum элементы ENUMi? Я имею в виду, может быть, вы можете определить ENUMi в порядке следования за их приоритетом и иметь способ получить ENUMi из EXTERNAL_VALUEi и отменить, когда это необходимо?
Других решений пока нет …