Как написать функцию которая может возвращать const_iterator и простой iterator?
Пишу простенький класс который будет разбивать контейнер на подконтейнеры, то есть отрезки. Сам класс:
template <typename Iterator >
class IteratorRange {
private:
Iterator first, last;
public:
IteratorRange(Iterator f, Iterator l)
: first(f)
, last(l)
{}
Iterator begin() const {
return first;
}
Iterator end() const {
return last;
}
size_t size() const {
return last - first;
}
};
template <typename Iterator>
class Paginator {
private:
std::vector<IteratorRange<Iterator>> pages;
public:
Paginator(Iterator _begin, Iterator _end, size_t _page_size)
{
Iterator it = _begin;
while (it != _end) {
size_t DistanceToEnd = _end - it;
pages.push_back({ it, next(it, min(_page_size, DistanceToEnd)) });
it = next(it, min(_page_size, DistanceToEnd));
}
}
auto begin() const {
return pages.begin();
}
auto end() const {
return pages.end();
}
size_t size() const { return pages.size(); }
};
Хочу реализовать функцию которая будет создавать экземпляр класса (то есть инстанцировать шаблонный клас и возвращать вектор подотрезков), но для константных контейнеров она должна возвращать const_iterator, соответственно для не константных просто iterator, как такое реализовать чтобы не использовать ключевое слово auto?
template <typename C>
??? Paginate(C& c, size_t page_size) {
return Paginator{ c.begin(), c.end(), page_size };
}
какой тип возврата должен быть?