Pergunta

Estou modificando o código de outra pessoa que usa TCHAR extensivamente.É melhor usar apenas std::wstring no meu código?wstring deve ser equivalente a TString em plataformas widechar, então não vejo problema.A razão é que é mais fácil usar uma wstring bruta do que suportar TCHAR...por exemplo, usando boost:wformat.

Qual estilo ficará mais claro para o próximo mantenedor?Eu perdi várias horas tentando entender as complexidades das cordas, parece que apenas usar wstring cortaria metade das coisas que você precisa entender.

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;

...a única diferença é o alocador.

No caso improvável de seu programa pousar em uma máquina de 9x de janela, ainda há uma camada de API que pode traduzir suas seqüências de caracteres UTF-16 em chars de 8 bits.Não há sentido em usar o TCHAR para um novo desenvolvimento de código. fonte

Foi útil?

Solução

Se você pretende atingir apenas plataformas Unicode (wchar_t), é melhor usar std::wstring.Se quiser oferecer suporte a compilações multibyte e Unicode, você precisará usar TString e similares.

Observe também que basic_string padroniza char_traits e alocador para um baseado no tipo de caractere passado, portanto, em compilações em que UNICODE (ou _UNICODE, nunca me lembro qual), TString e wstring serão iguais.

OBSERVAÇÃO:Se você está apenas passando os argumentos para várias APIs e não fazendo nenhuma manipulação neles, é melhor usar const wchar_t * em vez de std::wstring diretamente (especialmente se misturar código Win32, COM e C++ padrão), pois você acabará fazendo menos conversões e cópias.

Outras dicas

TCHAR costumava ser mais importante quando você compilava os binários duas vezes, uma vez para char e uma segunda para wchar_t.

Você ainda pode fazer essa escolha, se desejar, alterando as configurações do projeto MSVC de MBCS para Unicode e vice-versa.

Isso também significa que ao chamar a API do Windows você terá o tipo de dados correspondente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top