2017-07-06 2 views
-1

練習プロジェクトでは、サービスタイプクラスの概念と同様に、非同期/スレッド方法論を学習しています。オブジェクトのofstreamへの共有ポインタのベクトルがありますが、そのベクトル内の重複をチェックする方法はありません。共有ポインタのベクトルで重複した 'ofstream'オブジェクトを確認する方法

明確にするために、プロジェクトのモジュールごとに1つのログファイルを用意していますが、同じファイルに対して2つのストリームオブジェクトが追加された場合、出力にマングリングが発生する可能性があります。私はそれらを比較するためにいくつかの異なる方法を試しましたが、私はそうする標準的な方法を理解することはできません。また、その件に関する情報があまりないように見えるかもしれません。あるいは、おそらく、私が欠落して自分自身を叩く基本的なことを忘れていたかもしれません。

私はベクトルのオブジェクトにアクセスしていますが、これをコンパイルすることはできません。すべての助けが大歓迎です。

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

答えて

2

私はオープンストリームのパスを取得する標準的な方法があるのか​​疑いがあります。どのようにベクトルの代わりにfile-> ofstreamのマップがありますか?または、パスとオブストリームを含む独自のクラスを作成し、それらをベクターに入れます。

+0

私はマップを持つというアイデアが好きです。なぜあなたは私の質問を-1'dしたのか教えてください。私は、予備データなしでストリームのオブジェクトを比較する方法が全くないことを認識していませんでした。 – BleuGamer

+0

私は質問-1しなかった – pm100

関連する問題