2010-05-13 61 views
1

我正在使用接收ostream的函數,但我有wostream有沒有辦法將一個轉換爲另一個?我該如何轉換從wostream到ostream

特別是我想使用boost :: write_graphviz,它採用ostream,但我目前在< < <運算符爲wostream。

回答

0

我不相信你可以轉換。你將不得不得到一個ostream。

+0

當然,您可以使用適配器將它們轉換。 – 2010-05-13 16:25:34

0

如果我是你,我寧願改變我的方法,而不是試圖將wostream轉換爲ostream。我相信,如果沒有廣泛的字符流,你想要得到的東西很容易實現。

當然,這取決於您的應用程序的實際用途是什麼,但在10個案例中的9個案例中,您自己的轉換例程或使用第三方庫的簡單實現(例如iconv)顯然就足夠了。

更新:(如我在說什麼的證明) 谷歌代碼有wofstream和兩個只有一個搜索結果 - 爲wifstream。這個事實沒有說明問題嗎?

0

如果圖形輸出沒有wostream運營商,那麼你可以這樣做:



std::wstring convert(std::string const& s) 
{ 
    unsigned char const* tmp = reinterpret_cast<unsigned char const*>(s.data()); 

    std::wstring res = std::wstring(tmp, tmp + s.size()); 

    return res; 
} 

void f(std::wostream & out) 
{ 
    std::ostringstream gout; 
    gout << graph; // or whatever... 
    out << convert(gout.str()); 
} 

演員是必要的,如果你的字符串可以有177以上的任何值,如果可以轉成奇怪的字符,因爲wstring構造函數將轉換爲負數而不是直接複製。