在我的C ++应用程序中,我有时会创建不同的输出文件以进行故障排除。每个文件都是在我们的流水线操作的不同步骤创建的,并且很难知道文件来自哪个文件(文件时间戳都显示相同的日期)。
我正在考虑在我的应用程序中添加一个全局计数器,以及一个增加并返回该全局计数器的函数(具有多线程保护)。然后我可以将该计数器用作我创建的文件名的一部分。
这被认为是不好的做法吗?许多不同的模块需要创建文件,并且它们不一定相互连接。
答案 0 :(得分:4)
如果它仅用于调试,是暂时的,并且不会被释放,你可以做任何最快和最简单的事情。
另一方面,如果它可能长期存在于您的应用程序中并且可能潜入某个版本,那么我肯定会花更多时间编写一个基本的文件创建模块,所有其他模块都可以访问
答案 1 :(得分:2)
一般来说,这并不坏。
在C ++中,我会编写一个包含计数器和多线程保护的单例类。这样会更干净,并且会避免像使用c那样使用全局变量(你会使用类静态变量)。
答案 2 :(得分:2)
我认为,以足够高的精度添加文件名当前系统时间将更清晰,更容易实现和维护
//helper function to encapsulate details
string makeFileName(string filename)
{ return filename + getCurrentTime(); }
void MyClass::SomeMethod()
{
File f = CreateFile(makeFileName("myclassfile"));
...
}
答案 3 :(得分:1)
我个人为这些文件创建一个工厂,负责返回文件对象。您可以让该函数(或类)具有计数器的静态变量。
答案 4 :(得分:0)
我一般放弃了任何类型的全局变量,转而使用静态成员变量。它们执行相同的功能,您可以限制静态成员的更改和访问方式。