![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
rattick |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.2.2007 Репутация: нет Всего: нет |
Здравствуйте.
Есть класс в основе которого лежит контейнер list. Необходимо определить для него ряд методов. С обычными методами проблем не возникло, а вот с методами возвращающими и принимающими итераторы возникли проблемы. Собственно вопрос в том, как объявить итератор для моего класса?
и как я понимаю там же надо будет определять перегрузку операторов? |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
так:
http://liveworkspace.org/code/a993e7b86902...2d07702d9f5c086 |
|||
|
||||
rattick |
|
||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 24.2.2007 Репутация: нет Всего: нет |
Огромное спасибо!!!!!
вот как оказывается
а я делал
и компилятор ругался. Кстати, а почему именно так надо? |
||||
|
|||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Потому что имя std::list<T>::iterator зависит от параметра шаблона "T".
Шаблоны можно специализировать, и одинаковым именам придавать разный смысл, typename - указание компилятору что это имя типа (а не переменной, функции и т.д.)
typename нужен только внутри шаблонов (на этапе, когда "T" ещё не параметризирован конкретным типом): смотри пример Это сообщение отредактировал(а) Леопольд - 26.11.2010, 09:54 -------------------- вопросов больше чем ответов |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
иногда есть смысл обернуть итератор списка в свой
причина стадартная - не выставлять слишком много деталей реализации наружу в данном случае интерфейс итератора из нового класса определяется интерфейсом итератора списка, а не потребностями пользователя нового класса, поэтому пользователи могут завязываться на любые особенности списков например, списки поддерживают операцию splice, итератор нового класса тоже будет годиться для этой операции, вполне возможно, что пользователи класса этим воспользуются, а когда автор класса захочет сменить контейнер, его будет ждать неприятный сюрприз - он поломает кучу кода реализовать обёртку несложно - можно использовать boost::iterator_facade и написать пару методов (которые вызывают соответствующую функциональность list:iterator) -------------------- qqq |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |