代码之家  ›  专栏  ›  技术社区  ›  Dustin Getz sunsations

与遗留TCHAR代码接口的适当样式

  •  2
  • Dustin Getz sunsations  · 技术社区  · 14 年前

    我正在修改其他人广泛使用TCHAR的代码。在我的代码中使用std::wstring是更好的形式吗?wstring应该等同于widechar平台上的TString,所以我看不出有什么问题。基本原理是,使用原始wstring比支持TCHAR更容易。。。e、 例如,使用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;
    

    …唯一的区别是分配器。

    如果你的程序 仍然是可以转换的API层 使用TCHAR没有意义了 用于新代码开发。 source

    2 回复  |  直到 8 年前
        1
  •  2
  •   reece    14 年前

    如果您只打算针对Unicode(wchar\t)平台,那么最好使用std::wstring。如果希望支持多字节和Unicode构建,则需要使用TString和类似的工具。

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

        2
  •  0
  •   i_am_jorf    14 年前

    TCHAR以前在编译二进制文件两次时更为重要,一次用于char,另一次用于wchar\t。

    如果愿意,您仍然可以做出这个选择,将MSVC项目设置从MBCS更改为Unicode,然后再更改回来。

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