правильный стиль для взаимодействия с устаревшим кодом TCHAR - PullRequest
2 голосов
/ 14 июля 2010

Я изменяю чужой код, который широко использует TCHAR.Лучше ли просто использовать std :: wstring в моем коде?wstring должен быть эквивалентен TString на платформах widechar, поэтому я не вижу проблемы.Смысл в том, что проще использовать необработанную строку wstring, чем поддерживать TCHAR ... например, используя boost: wformat.

Какой стиль будет более понятен следующему сопровождающему?Я потратил несколько часов, пытаясь понять тонкости строк. Кажется, использование wstring обрезает половину всего, что вам нужно понять.

typedef std::basic_string<TCHAR> TString; //on winxp, TCHAR resolves to wchar_t
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring;

... единственное отличие - распределитель.

В маловероятном случае, когда ваша программа окажется на компьютере с Window 9x, все еще есть уровень API, который может преобразовывать ваши строки UTF-16 в 8-битные символы.Нет смысла использовать TCHAR для разработки нового кода. источник

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

Если вы собираетесь использовать только платформы Unicode (wchar_t), лучше использовать std :: wstring.Если вы хотите поддерживать многобайтовые и Unicode-сборки, вам нужно будет использовать TString и аналогичные.

Также обратите внимание, что basic_string по умолчанию использует char_traits и allocator для единицы, основанной на переданном символьном типе, поэтому при сборках UNICODEили _UNICODE, я никогда не смогу вспомнить, какие), TString и wstring будут одинаковыми.

ПРИМЕЧАНИЕ. Если вы просто передаете аргументы различным API и не выполняете никаких манипуляций с ними, вам лучше использовать const wchar_t * вместо std :: wstring напрямую (особенно если вы смешиваете Win32, COM и стандартный код C ++), так как в итоге вы будете меньше конвертировать и копировать.

0 голосов
/ 14 июля 2010

TCHAR имел обыкновение быть более важным, когда вы собирались компилировать двоичные файлы дважды, один раз для char и второй для wchar_t.

Вы все еще можете сделать этот выбор, если хотите, изменив настройки проекта MSVC с MBCS на Unicode и обратно.

Это также означает, что при вызове Windows API у вас будет соответствующий тип данных.

...