适合与传统TCHAR代码连接的样式

时间:2010-07-13 21:21:36

标签: c++ windows winapi wchar-t tchar

我正在修改其他广泛使用TCHAR的代码。在我的代码中使用std :: wstring是更好的形式吗? wstring应该相当于widechar平台上的TString,所以我没有看到问题。理由是,它更容易使用原始的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没有任何意义   用于新代码开发。   source

2 个答案:

答案 0 :(得分:2)

如果您只打算定位Unicode(wchar_t)平台,最好使用std :: wstring。如果要支持多字节和Unicode构建,则需要使用TString和类似的。

另请注意,basic_string基于传入的字符类型将char_traits和allocator默认为1,所以在UNICODE(或_UNICODE,我永远不记得哪个)的构建中,TString和wstring将是相同的。

注意:如果您只是将参数传递给各种API而不对它们进行任何操作,那么最好直接使用const wchar_t *而不是std :: wstring(特别是如果混合使用Win32,COM和标准C ++)代码)因为你最终会减少转换和复制。

答案 1 :(得分:0)

当你要编译二进制文件两次时,TCHAR会更加重要,一次是char,另一次是wchar_t。

如果您愿意,您仍然可以选择将MSVC项目设置从MBCS更改为Unicode并返回。

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