Not with classic C++ iterators, no. They aren't intended for polymorphic use.
What you can do is define an abstract base class for your iterators, which is then implemented by a (templated) wrapper around each concrete iterator type. The abstract base class simply defines all required operators as pure virtual. The downside is every operation on the iterator will need a virtual function call... Depending on your use this may or may not become an issue (usually not unless you use them to frequently iterate over very large collections).
Example:
template <typename T>
class InputIterator<T>
{
public:
virtual T operator*() const = 0;
// Other operators go here
};
template <typename TIterator>
class ConcreteInputIterator final
: public InputIterator<typename std::iterator_traits<TIterator>::value_type>
{
public:
ConcreteInputIterator(TIterator iterator) : m_iterator(iterator) {}
public:
virtual T operator*() const override
{
return *m_iterator;
};
private:
TIterator m_iterator;
};