【问题标题】:Output to string instead of wofstream输出到字符串而不是 wofstream
【发布时间】:2012-09-06 02:30:29
【问题描述】:

对于下面的代码,是否可以将结果输出到字符串而不是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));

【问题讨论】:

  • 嗨,克里斯,你能用一些代码进一步详细说明吗?我不熟悉C++
  • std::wostringstream 派生自与std::wofstream 相同的类,因此仅替换使用的变量类型应该仍然与您使用的其他函数兼容。不过,Stringstreams 维护的是字符串而不是文件(通过 str() 访问),这应该可以满足您的需求。
  • 像 std::string 输出 = woss.str();?再次抱歉这个愚蠢的问题,你怎么知道 wostringstream 和 wofstream 是从同一个类派生的?
  • 我现在明白了。这也很有帮助:en.cppreference.com/w/cpp/io

标签: c++ string wstring wofstream


【解决方案1】:

输出字符串流是一项 C++ 功能,其行为类似于输出文件流,因为它们都继承自 std::ostream,这意味着您可以在两者中使用几乎相同的函数。但是,字符串流对字符串而不是文件进行操作。

这对您来说意味着您需要做的所有事情(因为您没有使用任何wofstream 特定的函数)是将ofs 的类型更改为字符串流:

#include <sstream>
std::wostringstream oss;

现在我无法构建语言环境(我还没有使用过),但评论它们确实产生了正确的结果 (see this test)。可以看到,可以通过字符串流的str()函数访问字符串。

【讨论】:

  • 对。但实际上 str() 返回的是 wstring,而不是字符串...谢谢您的回答!
  • @echo,稍微窥探一下,你会发现std::ostringstreamstd::wostringstream 实际上是同一个基本类,但模板参数不同。前者是char,后者是wchar_tstr() 函数返回一个std::basic_string&lt;CharT&gt;,其中CharT 是模板参数。这基本上分别计算为std::stringstd::wstring,代码完全相同。如果你想让整个混乱使用你自己的 char 类型,你可以说std::basic_ostringstream&lt;YourType&gt; 没有代码更改产生正确的类型。
猜你喜欢
  • 2017-09-24
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多