- 1
- 2
- 3
- 4
- 5
- 6
- 7
extern QString code2text(unsigned long code)
{
if (code == 0) return QString::fromUtf8("Операция успешно завершена");
if (code == 1) return QString::fromUtf8("Неверная функция");
//over 3400 строк
return QString("%1").arg(code);
}
и еще один массив для кэширования QString'ов?
и массивов не знают, и доку найти не могут.
http://imgur.com/gallery/NRgQUrx
зы массивы знаю, притом считаю что хорошо.
детский сад, какой-то.
пихаешь все литералы в массив. массив индексируется уже существующим кодом.
берешь по коду нужную строку из массива и передаешь ее параметром QString::fromUtf8().
что бы зазря постоянно не конвертить литералы в QString'и, заводишь еще один массив указателей на QString'и и пользуешься им как кэшем: если указатель не нул, то возвращаешь копию уже существующего QString'а. иначе создаешь новый QString сохраняешь, его в кэше.
Ну, предположим, что кодов ошибок не 3500, а около 16000. Пусть описание каждой занимает 500 байт, это около 8 мегабайт дискового пространства, которые могут даже не быть загружены в оперативную память при запуске приложения. 8 мегабайт - это много или мало? Учитывая то, что ты уже пользуешься Qt, это - пшик, просто посмотри, сколько весят QtCore + QtGui + QtWidgets и не забудь к этому прибавить двойную буферизацию окошек.
А твой свич где хранит строки? :) В той самой оперативе.
но жесткие диски - да.
уже как 3 десятилетия, на всех системах с виртуальной памятью, экзешники никогда полностью в память не грузятся. грузятся постранично, по первому обращению.
http://stackoverflow.com/questions/12715646/how-to-use-formatmessage-c-for-getting-english-only-messages
Видимо автора таки настигла рука возмездия