如何检查共享指针向量中的重复 'ofstream' 对象
How to check for duplicate 'ofstream' objects in a vector of shared pointers
在实践项目中,我正在学习 async/threading 方法以及服务类型的概念 类。我有一个指向 ofstream 对象的共享指针向量,但不知道如何检查该向量中的重复项。
为了澄清起见,我选择让我的项目的每个模块有一个日志文件,但是如果为同一个文件添加两个 ofstream 对象可能会导致输出混乱。我尝试了几种不同的方法来比较它们,但我无法弄清楚这样做的标准方法。关于这个主题的信息似乎也不是很多,或者我可能错过了一些基本的东西,我会因为错过而自责。
我知道 'i' 正在访问向量中的对象,但似乎无法对其进行编译。非常感谢任何帮助。
class LoggerService
{
public:
...
private:
...
bool add_log_file(const std::string& file)
{
bool is_duplicate = false;
for (int i : *ofstreams_) // <------ This block.
{
if (file.c_str() == i)
{
is_duplicate = true;
break;
}
}
if (!is_duplicate)
{
return false;
}
else
{
ofstreams_.push_back(std::make_shared<std::ofstream>(file.c_str()));
return true;
}
}
...
static std::vector<std::shared_ptr<std::ofstream>> ofstreams_;
...
}
我怀疑是否有标准方法来获取打开的流的路径。你有一个 file->ofstream 的映射而不是一个向量怎么样。或者制作你自己的包含路径和 ofstream 的 class 并将它们放入 vector
在实践项目中,我正在学习 async/threading 方法以及服务类型的概念 类。我有一个指向 ofstream 对象的共享指针向量,但不知道如何检查该向量中的重复项。
为了澄清起见,我选择让我的项目的每个模块有一个日志文件,但是如果为同一个文件添加两个 ofstream 对象可能会导致输出混乱。我尝试了几种不同的方法来比较它们,但我无法弄清楚这样做的标准方法。关于这个主题的信息似乎也不是很多,或者我可能错过了一些基本的东西,我会因为错过而自责。
我知道 'i' 正在访问向量中的对象,但似乎无法对其进行编译。非常感谢任何帮助。
class LoggerService
{
public:
...
private:
...
bool add_log_file(const std::string& file)
{
bool is_duplicate = false;
for (int i : *ofstreams_) // <------ This block.
{
if (file.c_str() == i)
{
is_duplicate = true;
break;
}
}
if (!is_duplicate)
{
return false;
}
else
{
ofstreams_.push_back(std::make_shared<std::ofstream>(file.c_str()));
return true;
}
}
...
static std::vector<std::shared_ptr<std::ofstream>> ofstreams_;
...
}
我怀疑是否有标准方法来获取打开的流的路径。你有一个 file->ofstream 的映射而不是一个向量怎么样。或者制作你自己的包含路径和 ofstream 的 class 并将它们放入 vector