Тут в комментариях к посту о 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() будет отлично работать.