Строки в wxWidgets 3.0
September 11th, 2009 Begemot Posted in Oбщее
Тут в комментариях к посту о wxWidgets 3.0 возник вопрос, о том как теперь писать строковые литералы. Вопрос интересные, изменения там существенные и я до сих пор до конца не понимаю, как все таки правильно, поэтому решил сегодня немного поэкспериментировать с этим вопросом:
wxMessageBox(“тест test”);
Это работает, но это получается ANSI строка, можно использовать только символы текущей локали(ну и конечно первые 127). Добавив реально юникодный текст
wxMessageBox(“öffnen вікно привет Donnée rápido test”);
Получаем несколько warningов C4566 и кривой текст на экране.
В общем что бы работало надо писать одно из трех L””, _T(“”), wxT(“”) – это все сводится к L””. Если нужна локализация тогда так
wxMessageBox(_(L”öffnen вікно привет Donnée rápido test”));
Что не очень удобно, может введут новый макрос который будет делать сразу два дела… Или может он уже есть но я не знаю.
В итоге, если я правильно понимаю, картина такая – если у нас в литерале только английские буквы – пишем просто “text” или _(“text”), в противном случае L”text” или _(L”text”)(вместо L можно использовать любой из двух старых макросов _T()\wxT()). Весь старый код использующий wxT() будет отлично работать.
September 11th, 2009 at 11:56 pm
> одно из трех L””, _T(“”), _T(“”)
получается – из двух. Третье, видимо, wxT(“”)?
September 12th, 2009 at 8:23 am
Да, опечатался, поправил, спасибо 🙂
September 13th, 2009 at 11:45 am
Да, это решает проблему с русским текстом. Вообще то, Ctrl+R и замена _(” на _(L” во всем проекте занимает пару секунд времени, но неприятный осадок все равно остался…
September 13th, 2009 at 11:58 am
А отчего осадочек? никто и не обещал полную обратную совместимость… о том что полностью меняется все внутренняя кухня работы со строками известно давно.
Да и вообще если в приложении планируется локализация, то писать русские литерары – моветон 🙂
September 13th, 2009 at 12:38 pm
зато как удобно!!! 🙂
Осадочек в основном из-за того, что ужесточаются требования. вот раньше можно было писать хоть на китайском – теперь для этого требуются лишние телодвижения.
September 13th, 2009 at 12:55 pm
дык это требования не wxWidgets, зачем обижаешь ее ?:)
Попробуй написать std::wstring = “текст на китайском”