Страница 2 из 2

Re: Допустимо ли такое дублирование?

Добавлено: 19 янв 2016, 17:00
Absurd
BTW, я кажется понял мегапроблему Сиониста - ему надо возвращать пару итераторов из своего интерфейса, и он не знает как.

Для меня это тоже было очень большой проблемой, заставившей много думать. Класс представлял из себя граф, причем для каждого из узлов можно было взять итераторы child_begin() и child_end(). Я ее решил при помощи адаптации для своих нужд класса llvm :: pointee_iterator и создания временных вспомогательных коллекций содержащих коллекции указателей на детей.

Re: Допустимо ли такое дублирование?

Добавлено: 19 янв 2016, 17:02
Romeo
Absurd писал(а):Ну это понятно что каноничный способ сравнения это сравнение с end(). Но ничто не мешает этот bool реализовать при желании.
Если реализовать такой оператор - это самоцель, то да, можем. Сохранить в итераторе указатель на контейнер, и без проблем определим закончилось ли итерирование или нет. Но этим мы перечеркнём возможность использовать стандартные алгоритмы, да и нарушим принцип наименьшего удивления, что тоже важно. В общем, мне это решение не нравится.

Добавлено: 19 янв 2016, 20:55
Сионист
Absurd писал(а):Смарт-указатель может учитывать все что угодно. std::unique_ptr, например, позволяет учитывать заданные пользователем способы удаления объекта.
Но отличие именно итератора от обычного указателя известно.
Romeo писал(а):Речь идёт об универсальности интерфейса, а не внутренностей.
И как же дублирование интерфейса помешает его универсальности?
Absurd писал(а):BTW, я кажется понял мегапроблему Сиониста - ему надо возвращать пару итераторов из своего интерфейса, и он не знает как.
У меня вообще нет ни одного начатого проекта, в котором даже в перспективе мог бы появиться хотябы один итератор. Проблема в другом. Я просто хочу понять, что является итератором, а что уже нет и как его правильно писать.
Но этим мы перечеркнём возможность использовать стандартные алгоритмы,
Каким образом? Сравнение с членом контейнера ни куда не девается.
нарушим принцип наименьшего удивления,
All complete.

Re: Допустимо ли такое дублирование?

Добавлено: 19 янв 2016, 21:03
Absurd
Но отличие именно итератора от обычного указателя известно.
Суть ООП - написание универсального кода, работающего со всеми типами.

Re: Допустимо ли такое дублирование?

Добавлено: 19 янв 2016, 21:24
Romeo
Сионист писал(а):И как же дублирование интерфейса помешает его универсальности?
Если это будет не смена интерфейса, а вообще дублирование, то это меня поставит в ещё больший тупик. Зачем тебе иметь иметь два механизма, делающих по разному одно и то же? В одном месте будешь делать по-одному, а в другом по-другому? Дублирование кода - это одно из самых больших зол и этому учат на первом курсе любого специализированного ВУЗа. Причины я даже не буду описывать - они очевидны.

Re: Допустимо ли такое дублирование?

Добавлено: 20 янв 2016, 09:22
Сионист
АСУшнику не очевидны.

Re: Допустимо ли такое дублирование?

Добавлено: 20 янв 2016, 10:19
Romeo
Хорошо, тогда гугл в помощь. Вот первая ссылка :)

Re: Допустимо ли такое дублирование?

Добавлено: 20 янв 2016, 12:13
Сионист
All complete.