Сабж. Вот есть у меня какой то хитрый контейнер и в нем есть итератор и все что положено. Я могу делать обычный цикл

for(auto I=arr.begin(); I!=arr.end(); ++I){ ... }

и внутри этого цикла знать не только сам элемент но и доп. информацию (позиция в контейнере и всяко разно - все что итератор может рассказать).

Могу сделать foreach

for(T& x:arr){ ... }

и тут я буду знать только значения элемента.

Но я могу ведь сделать такую штуку

class Arr{
...
struct Cell{
T& operator *(){...}
T* operator ->(){...}
... // всякие методы рассказывающие об элементе контейнера
};
struct iterator: public Cell{
Cell& operator *(){ return *this; }
...
};
};

и тогда
for(auto& x:arr){ ... }

мне позволит получить доступ не только к элементу но и к информации об элементе.

Из бонусов - меньше букв писать при организации цикла.
Из плохого - это как то наверное не очевидно для пользователя?

Вопрос - насколько это вообще плохое решение и почему.








 , ,






URL записи