我该如何转换从wostream到ostream

问题描述:

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

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

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

+0

当然,您可以使用适配器将它们转换。 – 2010-05-13 16:25:34

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

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

更新:(如我在说什么的证明) 谷歌代码有wofstream和两个只有一个搜索结果 - 为wifstream。这个事实没有说明问题吗?

如果图形输出没有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构造函数将转换为负数而不是直接复制。