如何检查重复的' ofstream'共享指针向量中的对象

时间:2017-07-06 20:32:02

标签: c++ c++11 file-io smart-pointers c++-standard-library

在实践项目中,我学习了异步/线程方法以及服务类型类的概念。我有一个与ofstream对象共享指针的向量,但是如何检查该向量中的重复项则丢失了。

为了澄清,我选择在我的项目的每个模块中都有一个日志文件,但是如果为同一个文件添加了两个stream对象,则会导致输出中出现错误。我尝试过几种不同的方法来比较它们,但我无法弄清楚这样做的标准方法。似乎也没有关于这个主题的非常多的信息,或者也许我错过了一些基本的东西,我会因为失踪而拍打自己。

我知道'我'正在访问向量中的对象,但似乎无法进行编译。非常感谢任何和所有帮助。

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_;
    ...
}

1 个答案:

答案 0 :(得分:2)

我怀疑是否有一种标准的方式来获得开放的流程。怎么样而不是矢量你有一个file-&gt; ofstream的地图。或者创建自己的包含路径和ofstream的类,并将它们放在向量中