イテレータで渡すなら:
template <typename Iter>
void func(Iter first, const Iter& last) {
 while (first != last) {
  ++first;
 }
}
みたいにすればいいんじゃないの。
コンテナがよければ:
template <typename Container>
void func(Container& c) {
 typedef typename Container::iterator Iter;
}