私は、CSV形式のファイルを解析するためのイテレータのように動作するクラスを作成しました。 MyObject構造体を直接満たすために、特定のcsvファイルを読み込むための他のクラスも作成しました。したがって、このクラスは、(私は、コードの一部をエラー処理を削除)そのように使用することができます:イテレータを使用してフォーマットされたストリームを読み込むことは良いことですか?
std::ifstream in(filename);
MyObjectParser parser(in);
MyObjectParser::Iterator it;
for (it = parser.begin(); it != parser.end(); it++)
{
MyObject b = *it;
// do some stuff here ...
}
プログラムがうまく機能し、私はそれに満足しているが、私は、暗黙的な意味(だけ自分のためにすることを実現しましたか? )はであり、それはコレクションで繰り返されます。この場合、コレクションはなくストリームです。
std::ifstream in(filename);
MyObjectReader reader(in);
MyObject obj;
while(reader >> obj)
{
// do the same "some stuff" here...
}
それは味の問題だけです:
は私が明示的に>>演算子 をオーバーロードので、そのような何かを持っていることによって、私は、ストリームを使用していますお勧めフォームが好むべきでしょうか? 違いは何ですか(2番目のフォームではオブジェクトが塗りつぶされ、コピーされていないことを除いて)、最初のフォームまたは2番目のフォームを選択した場合の結果は何ですか?
なぜ私が別のものではなくソリューションを使用しているのかを正確に知るために、他の意見を聞いてうれしいです。
イテレータは*コレクション*を反復処理する必要がありますか?私は、イテレータがコンテナ、ストリーム(ファイル、ネットワークデータなど)、暗黙の(多分ダミーの)データなど、あらゆる種類のデータ**を反復処理することを理解しています。データ。それを一般的に保つ。 ;)私は個人的にイテレータベースのインターフェイスが好きです。 – leemes