printf形式の文字列書式設定を使用するC(> 80k行)の古いMUDコードベースを使用しています。それは普及しています。ほとんどすべてのテキストは、sprintfまたはvsprintfのラッパーを呼び出して実行されます。しかし、私は最近、STLを利用するためにg ++でコンパイルするようになりました。std :: string(実際には大文字と小文字を区別しない比較のための派生クラス)を使いたいと思います。std :: string aware vsprintfのオプション
明らかに、std :: stringを任意のprintf関数の可変引数の1つとして渡すことはできません。すべての場合に.c_str()が必要です。 printf関数への2000回以上の呼び出しを変更したくありません。です。私の質問は:私はどのようにstd :: string aware vsprintfを作ることができます?
2つのオプションがあります:std :: stringへのポインタをstd :: string.data(またはc_out())に変更する引数を反復処理する独自のprintf関数を作成してstdに渡します。 :vsprintf、または私はprintfの勇気を借りて自分のロールを張ることができます。最初のオプションは、明らかに仕事が少なくなるように聞こえます。
もちろん、誰かが以前にこの操作を行っていても、私のグーグルでは何も得られていない場合があります。最良の選択肢がどのようになるかについてのヒント
編集: この質問は、How to use C++ std::ostream with printf-like formatting?の複製ではありませんでしたが、これは私がその質問に答えるとは信じられません。私はstd :: ostreamと古いCのprintfを使って文字列を出力する方法を尋ねていません。私は、sprintf/vsprintfを大量に使用する古いCコードベースのパッチソリューションについて、出力ストリームを使用するためにこれらの関数への呼び出しを何千も書き換えずに助けを求めています。
_ "> 80k lines" _これはちょうどピーナッツです。 –
再開。質問:これは** ostream'ではなく、 'string'に関する** **です。はい、両方とも '名前空間std'から来ていますが、共通点はほとんどありません。 – MSalters