Как объявить прототип функции, возвращающей стандартный итератор? - PullRequest
1 голос
/ 22 января 2011

Таким образом, в качестве назначения класса я переопределяю std::vector, и у меня возникают проблемы с объявлением прототипа для:

iterator insert ( iterator position, const T& x );

Шаблон для моего класса итератора выглядит следующим образом

template<typename T>
class VectorIterator : public std::iterator<std::input_iterator_tag, T>

Шаблон для моего векторного класса выглядит следующим образом

template<typename T>
class Vector 

Как я могу объявить прототип для вставки, который будет возвращать std::iterator вместо моего собственного VectorIterator класса?Я, конечно, буду возвращать экземпляр моего собственного класса VectorIterator.

1 Ответ

4 голосов
/ 22 января 2011

Эта функция не возвращает std::iterator; он возвращает std::vector<T, Alloc>::iterator. Вам нужно набрать VectorIterator в вашем Vector:

template <typename T>
class Vector {
    typedef VectorIterator<T> iterator;
};

Это тип возврата функции insert. Любые ссылки на iterator и const_iterator в спецификации std::vector относятся к определениям типов, которые вам необходимо предоставить.

...