![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
User008 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
X::const_iterator X::f(T t) const и X::iterator X::f(T t)
Как такое реализуют без дублирования кода? Это сообщение отредактировал(а) User008 - 22.4.2012, 15:36 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
никак... если внутри сложная логика - ее выносят, все остальное остается.. |
|||
|
||||
User008 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
можно реализовать только "X::const_iterator X::f(T t) const", и используя const_cast, вызывать ее из "X::iterator X::f(T t)".
![]() |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
один раз довелось такое делать
в том случае отличий было немного - в основном, в типах поэтому отличающиеся типы я вынес в переметры шаблона, а оба итератора сделал typedef'ами с соответствующими параметрами для того, чтобы неконстантный итератор мог автоматически преобразовываться в константный, я сделал у шалонного итератора конструктор из неконстантного - для константного это нужное преобразование, а для неконстантного конструктор копирования -------------------- qqq |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Имхо, если логика совпадает, то можно неконстантный сделать через константный используя const_cast.
Другой вариант, можно сократить количество дублирующегося кода до минимума, вынеся всю константную логику в отдельный приватный метод (например, поиск нужного элемента по базе) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |