我如何从wostream转换为ostream

时间:2010-05-13 15:10:53

标签: c++ unicode ostream

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

特别是我想使用boost :: write_graphviz,它接受ostream但我目前在<< wostream的算子。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果我是你,我宁愿改变方法,而不是试图将wostream转换为ostream。我相信,如果没有广泛的字符流,您可以很容易地实现您想要获得的内容。

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

更新:(作为我所说的内容的证明) Google代码只有wofstream的一个搜索结果和wifstream的两个搜索结果。这个事实不能说明问题吗?

答案 2 :(得分: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构造函数的转换会将负数变成负数而不是直接位副本。