私はC++スキルを近代化しようとしているので、「STLの方法」が私には分かりません。複数の寄付者から寄せ集める
私は複数のソースからコンテナ(通常はstd::vector
)への寄稿を集めたいオブジェクトを持っています。各ソースはオブジェクトであり、これらのオブジェクトのそれぞれは、0から多くの寄与を返すメソッドget_contributions()
を提供します。収集者は各投稿者にget_contributions()
を呼び出し、結果を1つのコレクションに集約します。
質問は、get_contributions()
の最高の署名は何ですか?
オプション1:std::vector<contribution> get_contributions() const
は、これが最も簡単ですが、それは採集コピーマスターコレクションに結果の各セットとしてコピーの多くにつながります。そして、はい、パフォーマンスはここで重要です。たとえば、コントリビュータが幾何学モデルであり、コントリビューションがレンダリングのためにそれらを三角形に変換することになった場合、スピードはカウントされ、貢献の数は膨大になります。
オプション2:template <typename container> void get_contributions(container &target) const
これは、各投稿者はtarget.push_back(foo)
を呼び出すことにより、マスター・コンテナに直接の貢献を追加することができます。ここでの欠点は、コンテナを他のタイプの検査と操作にさらしていることです。私はできるだけ狭いインターフェイスを維持することを望むだろう。
オプション3:このソリューションでtemplate <typename out_it> void get_contributions(out_it &it) const
、アグリゲータは、マスターコレクションのstd::back_insert_iterator
を通過する、および個々の貢献は、各寄与のため*it++ = foo;
をするだろう。これは私が今までに思いついた最高ですが、よりエレガントな方法が必要であるという気持ちが残っています。 back_insert_iterator
はクルージュのように感じます。
オプション3が最適ですか、それとも良い方法がありますか?このパターンには名前がありますか?
リンクありがとうございます。それは思考を刺激するプレゼンテーションです。 –