CSV形式のファイルを解析するイテレータのように機能するクラスを作成しました。また、特定のcsvファイルを読み取ってMyObject構造を直接埋めるために、他のクラスを作成しました。したがって、クラスは次のように使用できます(コードのエラー処理部分を削除しました)。
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番目のフォームを選択した結果はどうなるかがはっきりとわかりません。
私が別のソリューションではなくソリューションを使用している理由を正確に知るために、他の意見を聞いていただければ幸いです。