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

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

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

Для меня это тоже было очень большой проблемой, заставившей много думать. Класс представлял из себя граф, причем для каждого из узлов можно было взять итераторы child_begin() и child_end(). Я ее решил при помощи адаптации для своих нужд класса llvm :: pointee_iterator и создания временных вспомогательных коллекций содержащих коллекции указателей на детей.
2B OR NOT(2B) = FF
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Absurd писал(а):Ну это понятно что каноничный способ сравнения это сравнение с end(). Но ничто не мешает этот bool реализовать при желании.
Если реализовать такой оператор - это самоцель, то да, можем. Сохранить в итераторе указатель на контейнер, и без проблем определим закончилось ли итерирование или нет. Но этим мы перечеркнём возможность использовать стандартные алгоритмы, да и нарушим принцип наименьшего удивления, что тоже важно. В общем, мне это решение не нравится.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Absurd писал(а):Смарт-указатель может учитывать все что угодно. std::unique_ptr, например, позволяет учитывать заданные пользователем способы удаления объекта.
Но отличие именно итератора от обычного указателя известно.
Romeo писал(а):Речь идёт об универсальности интерфейса, а не внутренностей.
И как же дублирование интерфейса помешает его универсальности?
Absurd писал(а):BTW, я кажется понял мегапроблему Сиониста - ему надо возвращать пару итераторов из своего интерфейса, и он не знает как.
У меня вообще нет ни одного начатого проекта, в котором даже в перспективе мог бы появиться хотябы один итератор. Проблема в другом. Я просто хочу понять, что является итератором, а что уже нет и как его правильно писать.
Но этим мы перечеркнём возможность использовать стандартные алгоритмы,
Каким образом? Сравнение с членом контейнера ни куда не девается.
нарушим принцип наименьшего удивления,
All complete.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Но отличие именно итератора от обычного указателя известно.
Суть ООП - написание универсального кода, работающего со всеми типами.
2B OR NOT(2B) = FF
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сионист писал(а):И как же дублирование интерфейса помешает его универсальности?
Если это будет не смена интерфейса, а вообще дублирование, то это меня поставит в ещё больший тупик. Зачем тебе иметь иметь два механизма, делающих по разному одно и то же? В одном месте будешь делать по-одному, а в другом по-другому? Дублирование кода - это одно из самых больших зол и этому учат на первом курсе любого специализированного ВУЗа. Причины я даже не буду описывать - они очевидны.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

АСУшнику не очевидны.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Хорошо, тогда гугл в помощь. Вот первая ссылка :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

All complete.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить