Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > iterator и const_iterator без дублирования кода |
Автор: User008 22.4.2012, 15:35 |
X::const_iterator X::f(T t) const и X::iterator X::f(T t) Как такое реализуют без дублирования кода? |
Автор: mes 22.4.2012, 16:25 |
никак... если внутри сложная логика - ее выносят, все остальное остается.. |
Автор: User008 22.4.2012, 16:30 | ||
Спасибо за ответ. Существуют ли ещё мнения? |
Автор: boostcoder 22.4.2012, 16:53 |
можно реализовать только "X::const_iterator X::f(T t) const", и используя const_cast, вызывать ее из "X::iterator X::f(T t)".![]() |
Автор: maxim1000 22.4.2012, 22:26 |
один раз довелось такое делать в том случае отличий было немного - в основном, в типах поэтому отличающиеся типы я вынес в переметры шаблона, а оба итератора сделал typedef'ами с соответствующими параметрами для того, чтобы неконстантный итератор мог автоматически преобразовываться в константный, я сделал у шалонного итератора конструктор из неконстантного - для константного это нужное преобразование, а для неконстантного конструктор копирования |
Автор: bsa 24.4.2012, 12:51 |
Имхо, если логика совпадает, то можно неконстантный сделать через константный используя const_cast. Другой вариант, можно сократить количество дублирующегося кода до минимума, вынеся всю константную логику в отдельный приватный метод (например, поиск нужного элемента по базе) |