Здравствуйте, slava_phirsov, Вы писали:
_>И есть мнение, что все это можно было сделать проще и безопаснее за счет незначительных накладных расходов.
Например.
_>>>и то, что большинство библиотечных алгоритмов принимают кучку однотипных аргументов (подходя формально — "bad smell" в чистом виде) — это все не есть достоинства.
EP>>Что значит "кучку однотипных аргументов"?
_>_>template <class ForwardIterator1, class ForwardIterator2>
_> ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1,
_> ForwardIterator2 first2, ForwardIterator2 last2)
_>
_>4 аргумента. И можно перепутать аргументы местами, и это скомпилируется без проблем. Да, это один из видов "bad smell" — слишком много аргументов.
1. Четыре одинаковых итератора тут только в частном случае, а в общем — две пары разных итераторов.
2. Во всей библиотеке итераторы из одного range принимаются по порядку, запутаться трудно.
3. Какая альтернатива-то? Естественно без потери мощности в общем случае. Есть Boost.Range (или его аналог который войдёт в стандарт) — но это всего лишь оптимизация некоторых частных случаев.