2012-09-06 102 views
0

對於下面的代碼,是否可以將結果輸出到字符串而不是wofstream?謝謝!輸出到字符串,而不是wofstream

wstring w = L"test"; 
std::wofstream ofs("test.txt"); 
std::locale utf8_locale(std::locale(), new boost::archive::detail::utf8_codecvt_facet()); 
ofs.imbue(utf8_locale); 
std::copy(w.begin(),w.end(), 
    std::ostream_iterator<wchar_t, wchar_t>(ofs)); 
+0

http://en.cppreference.com/w/cpp/io/basic_stringstream – chris

+0

嗨克里斯,你可以用一些代碼進一步闡述它嗎?我不熟悉C++ – echo

+2

'std :: wostringstream'是從與'std :: wofstream'相同的類派生而來的,因此,替換所使用的變量類型應該仍然與您使用的其他函數兼容。 Stringstreams保持一個字符串而不是一個文件,儘管(通過'str()'來訪問),這應該滿足您的需求。 – chris

回答

2

輸出字符串流是一個C++的功能,行爲類似於輸出文件流,在這個意義上,它們都從std::ostream繼承,這意味着您可以使用幾乎相同的功能在這兩個。但是,字符串流在字符串而不是文件上運行。

這意味着什麼,你的是,你需要做的(因爲你還沒有使用任何wofstream特異功能)是改變類型爲字符串流:

#include <sstream> 
std::wostringstream oss; 

現在我不能沒有得到地區的東西建設(我還沒有使用過這些),但評論他們確實產生了正確的結果(see this test)。如您所見,您可以通過字符串流的str()函數訪問該字符串。

+0

對。但實際上str()返回一個wstring,而不是一個字符串......感謝您的回答! – echo

+0

@echo,通過一些窺探,你會發現'std :: ostringstream'和'std :: wostringstream'實際上是相同的基本類,但是具有不同的模板參數。前者是'char',後者是'wchar_t'。 'str()'函數返回一個'std :: basic_string ',其中'CharT'是模板參數。這基本上分別用'std :: string'或'std :: wstring'來計算,代碼完全相同。如果你想讓整個混亂使用你自己的char類型,你可以說'std :: basic_ostringstream '沒有代碼更改產生正確的類型。 – chris

相關問題