Как я могу получить название элемента «Пн, Вт и т. д.», если у меня уже есть значение элемента «0, 1 и т. д.»
В каком-то старом коде C (некоторое время назад) я нашел аналогичный код:
std::string weekEnumToStr(int n)
{
std::string s("unknown");
switch (n)
{
case 0: { s = "Mon"; } break;
case 1: { s = "Tue"; } break;
case 2: { s = "Wed"; } break;
case 3: { s = "Thu"; } break;
case 4: { s = "Fri"; } break;
case 5: { s = "Sat"; } break;
case 6: { s = "Sun"; } break;
}
return s;
}
Против: это устанавливает «патологическую зависимость» между значениями перечисления и функцией... это означает, что если вы измените перечисление, вы должны изменить функцию, чтобы она соответствовала. Я полагаю, это верно даже для std::map.
Я смутно припоминаю, что мы нашли утилиту для генерации кода функции из кода перечисления. Длина таблицы enum выросла до нескольких сотен... и в какой-то момент, возможно, будет разумным выбором писать код для написания кода.
Примечание -
в попытке улучшить встроенную систему моя команда заменила множество таблиц (более 100?) строк с завершающим нулем, используемых для сопоставления значений enum int с их текстовыми строками.
Проблема с таблицами заключалась в том, что значение вне диапазона часто не замечалось, потому что многие из этих таблиц были собраны в одну область кода/памяти, так что значение вне диапазона выходило за именованный конец(и) таблицы и вернул строку с завершающим нулем из некоторой последующей таблицы.
Использование оператора function-with-switch также позволило нам добавить утверждение в предложение по умолчанию переключателя. Утверждения обнаружили еще несколько ошибок кодирования во время тестирования, и наши утверждения были привязаны к системному журналу static-ram-system-log, который наши полевые специалисты могли искать.
person
2785528
schedule
14.01.2018