如何处理不同的字符串类型

How to Deal with Varying String types?

本文关键字:字符串 类型 何处理 处理      更新时间:2023-10-16

我必须使用API,它使用微软的TCHAR宏等等,所以我想知道是否可以使用C++来简化任务。所以我想知道是否有一种方法可以支持隐式转换,为什么std::string不支持从较小的字符大小转换:

#include <Windows.h>
using String = std::basic_string<TCHAR>; // say TCHAR = wchar_t or equivalent
String someLiteralString = "my simple ansi string"; // Error here obviously
// some polymorphic class...
    const TCHAR* MyOverriddenFunction() override { return someLiteralString.c_str(); }
// end some polymorphic class

不支持隐式转换的原因是转换可能很复杂。简单的情况是,要转换的字符串是纯ASCII,如您的示例所示,但无法保证这一点。该标准的制定者明智地避开了这个问题。

如果您不知道字符串是否为宽字符,可以在每个字符串文字周围使用Microsoft的_T()宏来生成正确的字符。但你说你不想那样做。

现代Windows编程总是在API中使用宽字符。很可能你的程序也是,否则你显示的代码不会导致错误。一旦你使用了宽字符,你就不太可能切换回窄字符。对文字进行一个简单的单字符更改将使其具有宽字符以匹配字符串类型:

String someLiteralString = L"my simple ansi string";

使用(ATL/MFC)CStringT类,它将使您的生活更加轻松。

http://msdn.microsoft.com/en-us/library/ms174284(v=vs.80).aspx