Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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,  14:35 Найти цитируемый пост)
Как такое реализуют без дублирования кода?

никак... если внутри сложная логика - ее выносят, все остальное остается..

Автор: User008 22.4.2012, 16:30
Цитата(mes @ 22.4.2012,  16:25)
Цитата(User008 @  22.4.2012,  14:35 Найти цитируемый пост)
Как такое реализуют без дублирования кода?

никак... если внутри сложная логика - ее выносят, все остальное остается..

Спасибо за ответ. Существуют ли ещё мнения?

Автор: boostcoder 22.4.2012, 16:53
можно реализовать только "X::const_iterator X::f(T t) const", и используя const_cast, вызывать ее из "X::iterator X::f(T t)".
 smile 

Автор: maxim1000 22.4.2012, 22:26
один раз довелось такое делать

в том случае отличий было немного - в основном, в типах

поэтому отличающиеся типы я вынес в переметры шаблона, а оба итератора сделал typedef'ами с соответствующими параметрами

для того, чтобы неконстантный итератор мог автоматически преобразовываться в константный, я сделал у шалонного итератора конструктор из неконстантного - для константного это нужное преобразование, а для неконстантного конструктор копирования

Автор: bsa 24.4.2012, 12:51
Имхо, если логика совпадает, то можно неконстантный сделать через константный используя const_cast.
Другой вариант, можно сократить количество дублирующегося кода до минимума, вынеся всю константную логику в отдельный приватный метод (например, поиск нужного элемента по базе)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)