ostream を受け取る関数を使用していますが、wostream を使用しています。一方を他方に変換する方法はありますか?
特に、ostream を使用する boost::write_graphviz を使用したいのですが、現在、wostream の << 演算子を使用しています。
グラフ出力に 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 コンストラクターが行うキャストにより、ストレート ビット コピーではなくマイナス値がマイナス値に変換されるため、奇妙な文字に変わる可能性がある場合は、キャストが必要です。
あなたが改宗できるとは思えません。ostream を取得する必要があります。
もし私があなただったらwostream
、ostream
. ワイド char ストリームがなくても、取得したいことが簡単に実現できると確信しています。
もちろん、それはアプリケーションの実際の目的によって異なりますが、10 件中 9 件のケースでは、独自の変換ルーチンを簡単に実装するか、サードパーティ ライブラリ (例: iconv
) を使用するだけで明らかに十分です。
更新: (私が言っていることの証明として) Google コードには、 forwofstream
と 2つの検索結果しかありませんwifstream
。その事実が物語っているではないか。