![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Vyacheslav |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
как разрешить проблему
Каой тип объявить в качестве result? -------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Используй вместо
typedef EntryMap::iterator EntryMapIterator; вот это typedef EntryMap::const_iterator EntryMapIterator --- Хотя на MSDN-е указана возможность для map.find() ...
...присваиваться просто итератору. Но я плохо представляю как две функции перегружены по возвращаемому значению и как вызывать первую. Я использую вторую. Может быть первую вызывать так: find_res = (*mymap.find( key )).second; Это сообщение отредактировал(а) comcon1 - 3.8.2005, 16:25 |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Спасибо. В общем я то же вышел на на const_iterator.
Дополнительный вопрос нужно реализовать для map типа
Но iterator при разименовании возвращает pair вместо RegistryEntry* как быть? -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Первое что приходит в голову: написать свою версию алгоритма
--------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Ну тогда можно и темплаейтами не заморачиваться
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Извини. Но если писать адаптеры то будет пострашнее.(ИМХО)
А что не понравилось? Код будет спрятан в хедере точно так же как for_each, и пользоваться так же удобно как и for_each. Что по-твоему больше в духе темплейтов? PS см. boost::bind Добавлено @ 17:40 http://www.boost.org/libs/bind/bind.html#w...member_pointers Это сообщение отредактировал(а) LPBOY - 3.8.2005, 17:51 --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Они перегружаются по контексту - они не только возвращаемым значением отличаются: одна из них константная. Так что для конст-объекта всегда вызывается вторая функция (константная), а для не-конст - первая. Это вообще-то стандартный прием - определять пару "почти" одинаковых функций - посмотри, например, оператор [] для массива и т.д. Без этого очень трудно жить, если последовательно объявлять константным все, что по логике-семантике таковым является. Не-конст find не вызовешь из константного метода. С другой стороны, иногда нужно найти объект, чтобы его удалить, так что здесь const_iterator никак не пойдет.
Да ладно! в данном случае обертка будет тривиальная. Имя ей можно дать "говорящее" - "делать то-то" - что весьма повышает читаемость. Кроме того, использование алгоритмов типа for_each и пр. дает возможность даже не вспоминать, какого типа там итератор должен быть (а иногда эти определения бывают весьма многоэтажными): есть begin-end, и слава богу. Я часто пишу свои локальные алгоритмы-обработчики как шаблоны по итератору, даже если точно знаю, что будет ровно одно инстационирование: типы итераторов могут быть вложенными во внутренние private классы, и вытаскивать их наружу ради пары алгоритмов не хочется. А шаблонному алгоритму надо только чтобы тип был виден в точке вызова. Ну и всегда есть возможность использовать бустовские binder'ы - они значительно удобнее и лучше читаются. -------------------- ... |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |