我需要跨平臺的代碼跳過開頭的空格寬字符串。 它看起來是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