私は頭が良く、出力イテレータを受け入れるメンバー関数を作成できると思っていました。このようにして、コレクションを返したり、参照によってコレクションを取得したりすることを避けることができました。例えば:
template <typename TOutIterator>
void getHeaderNames(TOutIterator destination);
template <typename TOutIterator>
void getHeaderValues(std::string const& name, TOutIterator destination);
これらの関数は、渡されたイテレータにその結果を書き込みます。このようにして、セット、ベクトル、または ostream のいずれに書き込んでいるのかを心配する必要はありません。
今、私はそれほど賢くないと感じています。テストで実装をスタブ化できるように、これらの関数を仮想化したいと考えています。残念ながら、テンプレート メンバー関数を仮想にすることはできません。これは理にかなっています。
これらの関数をジェネリックに保ち (何にでも書き込み)、同時に仮想化できるようにする方法はありますか? すべてをベクトルに書き込んで、向きを変えて標準出力などに書き込むことは避けたいと思います。
自分の状況をもっと明確に説明する必要がある場合はお知らせください。