我正在使用一个接收 ostream 的函数,但我有 wostream 有没有办法将一个转换为另一个?
特别是我想使用 boost::write_graphviz ,它采用 ostream 但我目前在 << wostream 的运算符中。
我不相信你可以转换。你必须得到一个ostream。
如果图形输出没有 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 构造函数会将负数转换为负数,而不是直接位复制。
如果我是你,我宁愿改变我的方法,而不是尝试转换wostream
为ostream
. 我敢肯定,无需宽字符流即可轻松实现您想要得到的东西。
当然,这取决于您的应用程序的实际目的是什么,但在 10 种情况中的 9 种情况下,您自己的转换例程或使用第三方库(例如iconv
)的简单实现显然就足够了。
更新:(作为我所说的证明)谷歌代码只有一个搜索结果 forwofstream
和两个 - for wifstream
. 这不是事实本身吗?