1

我正在使用一个接收 ostream 的函数,但我有 wostream 有没有办法将一个转换为另一个?

特别是我想使用 boost::write_graphviz ,它采用 ostream 但我目前在 << wostream 的运算符中。

4

3 回答 3

0

我不相信你可以转换。你必须得到一个ostream。

于 2010-05-13T15:16:48.050 回答
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 构造函数会将负数转换为负数,而不是直接位复制。

于 2010-05-13T16:22:27.783 回答
0

如果我是你,我宁愿改变我的方法,而不是尝试转换wostreamostream. 我敢肯定,无需宽字符流即可轻松实现您想要得到的东西。

当然,这取决于您的应用程序的实际目的是什么,但在 10 种情况中的 9 种情况下,您自己的转换例程或使用第三方库(例如iconv)的简单实现显然就足够了。

更新:(作为我所说的证明)谷歌代码只有一个搜索结果 forwofstream和两个 - for wifstream. 这不是事实本身吗?

于 2010-05-13T15:34:29.993 回答