我需要跨平台的代码跳过开头的空格宽字符串。 它看起来是G ++(和Qt明显)在所有 所以下面的代码不会初始化宽字符串插槽工作正常,VC++,但几乎G ++失败bad_cast异常:的Qt使用的std :: use_facet与wstring的
#include <string>
#include <locale>
#include <iostream>
int main()
{
typedef std::ctype<std::wstring::value_type> vtct;
std::wstring str=L" 1122";
const std::wstring::value_type* unspace =
std::use_facet<vtct>(std::locale::classic()).
scan_not(std::ctype_base::space|std::ctype_base::punct,
str.c_str(), str.c_str() + str.length());
//std::cout << unspace << std::endl;
wprintf(L"{%s}\n", unspace);
return 0;
}
,按照规范:“bad_cast当区域设置对象中的方面存储库不包含所请求的语言环境的方面时出现异常:: id“
所以一般问题g ++如何处理宽字符串?更窄的问题 - 如何初始化面至少为ctype?
更新:经过一些实验后,我发现linux g ++正确地初始化宽字符串的方面 - 所以代码工作。明显描述的问题是功能,如果只有mingw。
我愿意把(它很复杂)。第二部分不是真实的,因为它不是提供本地化支持的编译器。它可能是默认提供的库,编译器对本地化没有很好的支持, – 2009-09-18 18:32:02
@rpg - 感谢回复。它不是(-1),但是:对并发症强烈不同意。这在逻辑上是难以理解的。 QChar不能使用,因为代码必须是跨平台的,所以它必须以VC++编译为g ++。 – Dewfy 2009-09-19 06:20:47
@马丁,你是对的,这是图书馆。 – rpg 2009-09-19 12:56:06