Вы также можете использовать auto для определения указателя на функцию:
const auto T_CallbackName = Foo :: CallbackName
blockquote>или ссылку на функцию
[ 113] авто & амп; T_CallbackName = Foo :: CallbackNameblockquote>
заметит, что это все равно будет работать, даже если вы измените количество параметров обратного вызова
Быстрый ответ: Нет.
Более длинный ответ: это будет работать, если строка только будет содержать регулярные символы ANSI, например, американский английский язык, так как эти коды символов являются тем же в UTF-8 и ANSI.
Если символы не-ANSI будут включены, или какие-либо двухбайтовые закодированные символы, то необходимо будет преобразовать к использованию Unicode-16 MultiByteToWideChar с CP_UTF8. Ваша программа должна будет также быть скомпилирована с UNICODE, определенным, или можно использовать вызовы API 'W' - например, MessageBoxW.
(Обратите внимание, что функции, берущие текстовый аргумент, такие как MessageBox, CreateWindow отображаются или на или на версии 'W' в зависимости от того, определяется ли UNICODE).
Это может также быть полезным;
Я использую макросы преобразования строк ATL/MFC. Например, если Вам назвали строку ASCII myUTF8Str
содержа символы UTF8:
::MessageBox(hWnd, CA2T(myUTF8Str, CP_UTF8), _T("Caption"), MB_OK);
Кроме того, можно создать экземпляр строки, например:
CA2T myConvertedString(myUTF8Str, CP_UTF8);
...
TRACE(_T("Converted: %s\n"), myUTF8Str.m_psz);
Отметьте m_psz
участник, который позволяет доступ только для чтения к необработанному указателю строки.
Можно также закодировать использование CT2A
, например:
CT2A myEncodedString("Some UTF8", CP_UTF8);
Если Вы не используете ТЕКСТОВЫЕ макросы, то используйте CA2W, CW2A, и т.д.
Нет, используйте MultiByteToWideChar с CP_UTF8
. См. http://www.siao2.com/2006/10/11/816996.aspx для того, почему A не может сделать этого; W (UCS-2) единственная альтернатива.