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

时间:2013-12-06 21:44:05

标签: c++ windows

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

#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

2 个答案:

答案 0 :(得分:1)

不支持隐式转换的原因是转换可能很复杂。简单的情况是,在您的示例中,要转换的字符串是纯ASCII,但是没有办法保证这一点。该标准的创造者明智地远离了这个问题。

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

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

String someLiteralString = L"my simple ansi string";

答案 1 :(得分:0)

使用(ATL / MFC)CStringT课程,它会让你的生活更轻松。

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