У меня есть такой класс перечисления (позже я планирую добавить к нему дополнительные параметры):
enum class ViSequencePointType {
JumpToValue = 0,
RampToValue = 1
};
Затем у меня есть текстовый файл конфигурации, каждая строка которого должна представлять одно из значений перечисления. Что-то вроде этого:
1
0
255
A
WTF
Мне нужно проанализировать этот файл и создать вектор этого класса enum... поэтому я делаю что-то вроде:
bool conversionResult = false;
int colThree = line.toInt(&conversionResult);
if(!conversionResult) {
//failed to convert to integer
} else {
ViSequencePointType pt = static_cast<ViSequencePointType>(colThree);
switch(pt) {
case ViSequencePointType::JumpToValue:
break;
case ViSequencePointType::RampToValue:
break;
default:
break;
}
для этого случая default
компилятор говорит
Метка по умолчанию в переключателе, которая охватывает все значения перечисления
что, как я полагаю, означает, что если в текстовом файле существует какая-либо недопустимая запись, я не могу ее найти!
Итак, как мне решить эту проблему, не допуская проскальзывания какого-либо недопустимого перечисления во время времени выполнения?
default
вашего оператора switch? Например, для строки «255» в вашем файле. - person vahancho   schedule 19.02.2019ViSequencePointType
UB, является другой вопрос. - person Max Langhof   schedule 19.02.2019{SeqPointFirst=0,JumpToValue=0,RampToValue,SeqPointLast=RampToValue}
), а затем просто проверить диапазон целого числа перед приведением к перечислению. Конечно, это работает, только если ваши значения перечисления последовательны. - person Karsten Koop   schedule 19.02.2019