3

関数fprintfは に書き込みますFILE*。stringstream に書き込む debugPrint 関数があります。関数は多くの場所で使用されており、コードが壊れる可能性があるため、関数を変更したくありません。

文字列ストリームを fprintf に渡すにはどうすればよいですか?

更新: をラップしstringstreamFILEアンラップできますか?

4

1 に答える 1

1

ostream を fprintf に「渡す」ことはできません。FILE構造はプラットフォームに依存します。

これはおそらく最善の方法ではありませんが、悪質なマクロを作成することはできます:

#undef fprintf
#define fprintf my_fprintf

また、2 つの my_fprintfs を作成できます。1 つは を受け取りFILE*、もう 1 つは引数として受け取りstd::stringstream&ます。

my_fprintf を直接呼び出すだけでマクロを回避できますが、呼び出しサイトを変更する必要があります。

ポータブルに「stringstream を FILE* にラップ」することはできませんが、システム固有の方法がいくつかあります。それがあなたの求めるものなら、例えば Linux には fopencookie() があり、これは読み書き関数への関数ポインタを取ります。その後、std::stringstream をラップする関数を作成できます。

于 2013-04-18T08:57:44.790 に答える