仮想関数の引数にイテレータを渡したいんですけど、どうすればいいですか?

class Base {
public:
template <class Iterator>
void f(Iterator first, Iterator last)=0;
};

このようなことがしたいんですけど、仮想関数を関数テンプレートにすることができず困っています。
引数を具体的な型にすると、汎用性がなくなってしまうし、う〜ん・・・。