我们有大量使用 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 函数/宏、Visual Studio?等)。困难(我可以看到)是:
sprintf 语句的内容可以是任何内容。(所以我们需要解析一个 sprintf 语句?)
some_file 和 filename 可以在任何地方声明,可以命名为任何名称,并且经常被重用于输出到多个文件。(所以我们需要解析C++?)
这可能/可行吗?
对于加分,我们是否可以避免在字符串上调用 .c_str() (不更改 ofstream 构造函数)?