Допустимо ли такое дублирование?
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
BTW, я кажется понял мегапроблему Сиониста - ему надо возвращать пару итераторов из своего интерфейса, и он не знает как.
Для меня это тоже было очень большой проблемой, заставившей много думать. Класс представлял из себя граф, причем для каждого из узлов можно было взять итераторы child_begin() и child_end(). Я ее решил при помощи адаптации для своих нужд класса llvm :: pointee_iterator и создания временных вспомогательных коллекций содержащих коллекции указателей на детей.
Для меня это тоже было очень большой проблемой, заставившей много думать. Класс представлял из себя граф, причем для каждого из узлов можно было взять итераторы 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" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Но отличие именно итератора от обычного указателя известно.Absurd писал(а):Смарт-указатель может учитывать все что угодно. std::unique_ptr, например, позволяет учитывать заданные пользователем способы удаления объекта.
И как же дублирование интерфейса помешает его универсальности?Romeo писал(а):Речь идёт об универсальности интерфейса, а не внутренностей.
У меня вообще нет ни одного начатого проекта, в котором даже в перспективе мог бы появиться хотябы один итератор. Проблема в другом. Я просто хочу понять, что является итератором, а что уже нет и как его правильно писать.Absurd писал(а):BTW, я кажется понял мегапроблему Сиониста - ему надо возвращать пару итераторов из своего интерфейса, и он не знает как.
Каким образом? Сравнение с членом контейнера ни куда не девается.Но этим мы перечеркнём возможность использовать стандартные алгоритмы,
All complete.нарушим принцип наименьшего удивления,
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Если это будет не смена интерфейса, а вообще дублирование, то это меня поставит в ещё больший тупик. Зачем тебе иметь иметь два механизма, делающих по разному одно и то же? В одном месте будешь делать по-одному, а в другом по-другому? Дублирование кода - это одно из самых больших зол и этому учат на первом курсе любого специализированного ВУЗа. Причины я даже не буду описывать - они очевидны.Сионист писал(а):И как же дублирование интерфейса помешает его универсальности?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
АСУшнику не очевидны.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Хорошо, тогда гугл в помощь. Вот первая ссылка 

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
All complete.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.