sprintf と cstrings を使用してファイル名を作成する「デモ」コードが大量にあります。非常に長いファイル名を許可し、よりクリーンな構文を提供するために、これを c++ 文字列に置き換えたいと思います。
したがって、基本的に次のようなブロックを変換する必要があります
ofstream some_file;
char filename[100];
sprintf(filename,"%s/soln%i.dat",a.c_str(), b);
some_file.open(filename);
のようなものに
ofstream some_file((a + "soln" + to_string(b) + ".dat").c_str());
ただし、これは多くの場所で使用されているため、ある種の自動変換を使用したいと考えています (つまり、sed 式、emacs 関数/マクロ、ビジュアル スタジオなど)。(私が見ることができる)困難は次のとおりです。
sprintf ステートメントの内容は何でもかまいません。(つまり、sprintf ステートメントを解析する必要がありますか?)
some_file と filename はどこでも宣言でき、任意の名前を付けることができ、複数のファイルへの出力に再利用されることがよくあります。(つまり、C++ をパースする必要があるのでしょうか?)
これは可能/実現可能ですか?
おまけとして、(ofstream コンストラクターを変更せずに) 文字列に対して .c_str() を呼び出さなくて済むようにできますか?