Я написал свой собственный шаблон контейнера с итератором. Как реализовать const_iterator?C++: Как написать const_iterator?
template <class T>
class my_container {
private:
...
public:
my_container() : ... { }
~my_container() { }
class iterator : public std::iterator<std::bidirectional_iterator_tag, T> {
public: ...
Что относительно методов, которые принимают итераторы в качестве аргументов или возвращают итераторы? Я должен перегрузить их для const_iterators? Похоже на кучу повторяющегося кода. –
итераторы должны быть конвертируемыми в const_iterators, поэтому вам не придется перегружать, если вам нужен только const_iterator. Вы выполняете функции типа begin(), end(), но нет никакого способа обойти это, поскольку const также является частью подписи метода. – 2009-06-30 06:54:05
@ Posco Grubb: Нет. Если у вас есть методы, которые принимают итераторы, то их шаблоны. Метод должен работать на все, что действует как итератор. Если для этого метода требуется итератор, а не const_iterator, компилятор будет генерировать соответствующую ошибку. –