1

ostream を受け取る関数を使用していますが、wostream を使用しています。一方を他方に変換する方法はありますか?

特に、ostream を使用する boost::write_graphviz を使用したいのですが、現在、wostream の << 演算子を使用しています。

4

3 に答える 3

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

あなたが改宗できるとは思えません。ostream を取得する必要があります。

于 2010-05-13T15:16:48.050 に答える
0

もし私があなただったらwostreamostream. ワイド char ストリームがなくても、取得したいことが簡単に実現できると確信しています。

もちろん、それはアプリケーションの実際の目的によって異なりますが、10 件中 9 件のケースでは、独自の変換ルーチンを簡単に実装するか、サードパーティ ライブラリ (例: iconv) を使用するだけで明らかに十分です。

更新: (私が言っていることの証明として) Google コードには、 forwofstreamと 2つの検索結果しかありませんwifstream。その事実が物語っているではないか。

于 2010-05-13T15:34:29.993 に答える