正确的风格与传统的TCHAR代码接口

我正在修改其他人广泛使用TCHAR的代码。 在我的代码中使用std :: wstring是更好的forms吗? wstring应该相当于在widechar平台上的TString,所以我没有看到问题。 理由是,它更容易使用原始的wstring比支持TCHAR …例如,使用boost:wformat。

下一个维护者会更清楚哪种风格? 我浪费了几个小时的时间,试图理解string的复杂性,似乎只是使用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-16string翻译成8位字符。 使用TCHAR进行新代码开发没有任何意义。 资源

如果您只打算使用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 ++代码)最终减少转换和复制。

当你要去编译二进制文件时,TCHAR比较重要,一次是char,另一个是wchar_t。

如果你喜欢,你仍然可以做这个选择,把MSVC项目设置从MBCS更改为Unicode并返回。

这也意味着在调用Windows API时,您将拥有匹配的数据类型。