私は、入力ストリームから単語を抽出するように設計された一種のistream_iterator
(それを呼ぶ)設計をしています。my_istream_iterator
イテレータから抽出された単語が処理される方法は、単語がストリームで区切られる方法とは無関係ですが、単語自体は多くの形式の1つに従う場合があります。これに対応するために、my_istream_iterator
ユーザーがイテレーターのテンプレート引数リストでポリシークラスのタイプを指定しなくても、入力ストリームを使用して作成するときにポリシークラスを指定できるようにする必要があります。たとえば、CSVファイルのエントリを行優先順に出力したい場合は、次のようなことができるようにしたいと思います。
std::ifstream is("words.csv");
// Assume that the_policy_class is used to read a special kind
// of CSV file that deviates from the standard specification.
// I don't want to have to specify the type of the policy class
// used by the iterator; how would I be able to do this? (The
// value_type of `mystream_iterator` is always char*).
my_istream_iterator begin = csv_begin<the_policy_class>(
is, the_policy_class('\t', '\n', 1));
// Default constructor for end-of-stream iterator.
my_istream_iterator end;
std::ostream_iterator<char*> out(std::cout, ", ");
// Print the words, delimited by commas, to stdout.
std::copy(begin, end, out);
mystream_iterator
ポリシークラスがイテレータによって内部的に使用されている場合でも、を作成するときにポリシークラスのタイプを指定するユーザーフォームを節約するにはどうすればよいですか?これは可能ですか?
ご協力いただきありがとうございます!
それが役立つ場合、my_istream_iterator
クラスの定義は次のようになります。
template <typename Character, typename CharTraits = std::char_traits<Character>,
typename Distance = std::ptrdiff_t>
class basic_my_istream_iterator : public std::iterator<std::input_iterator_tag,
const Character*, Distance>
{
/* ... */
};
typedef basic_my_istream_iterator<char> my_istream_iterator;
typedef basic_my_istream_iterator<wchar_t> my_wistream_iterator;