我必须使用使用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

最佳答案

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

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

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

String someLiteralString = L"my simple ansi string";

09-26 21:38
查看更多