Как правильно наследовать std :: iterator - PullRequest
3 голосов
/ 23 апреля 2010

Ребята, если у меня класс, как показано ниже:

template<class T>
class X
{
T** myData_;
public:
class iterator : public iterator<random_access_iterator_tag,/*WHAT SHALL I PUT HERE? T OR T** AND WHY?*/>
{
T** itData_;//HERE I'M HAVING THE SAME TYPE AS MAIN CLASS ON WHICH ITERATOR WILL OPERATE
};
};

Вопросы в коде рядом с соответствующими строками.
Спасибо.

Ответы [ 3 ]

2 голосов
/ 23 апреля 2010

В качестве отправной точки, ваш тип значения должен быть типом объекта, который содержит ваш контейнер. Я думаю, что это будет либо T, либо T *, вы не предоставите достаточно информации, чтобы сказать. См. Здесь для объяснения того, что означают различные параметры. Остальные часто можно оставить по умолчанию.

0 голосов
/ 23 апреля 2010

Если вы просто не хотите изучать этот материал, я бы предложил использовать Boost.Iterator

0 голосов
/ 23 апреля 2010

Что касается первого вопроса, это должен быть тип данных, который возвращает итератор. Предположительно T.

Что касается второго, то это полностью зависит от того, что фактически делает ваш итератор, что не является определенным или очевидным из предоставленной информации.

Обратите внимание, что std::iterator не определяет никаких операций для вас, он определяет только некоторые typedef, которые вы можете унаследовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...