2012-09-06 8 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

안녕하세요. Chris, 일부 코드로 자세히 설명해 주시겠습니까? 나는 C++에 익숙하지 않다. – echo

+2

'std :: wostringstream'은'std :: wofstream'과 같은 클래스에서 파생되었으므로, 사용 된 변수의 타입을 바꾸는 것은 여전히 ​​당신이 사용하는 다른 함수와 호환되어야한다. Stringstreams는 파일보다는 문자열을 유지하지만 ('str()'을 통해 액세스), 이는 사용자의 요구를 충족시켜야합니다. – chris

답변

2

출력 문자열 스트림은 모두 대부분 동일한 기능을 사용할 수 있다는 것을 의미, 둘 다 std::ostream에서 상속한다는 의미에서 출력 파일 스트림에 유사하게 동작은 C++ 기능입니다. 그러나 문자열 스트림은 파일이 아닌 문자열로 작동합니다. 지금은 나오지 않았어

#include <sstream> 
std::wostringstream oss; 

이 당신을 위해 무엇을 의미

당신이 (당신이 어떤 wofstream - 특정 기능을 사용하지 않은으로) 할 필요가 문자열 스트림에 ofs의 유형을 변경 있다는 것이다 (아직 사용하지 않은) 로케일 자료를 얻지 만, 실제로 주석을 달아 정확한 결과를 얻었습니다 (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