Я написал функцию для сбора результатов расширенного диапазона итератора. Вот:
template<typename Output, typename SinglePassRange>
Output collect(const SinglePassRange & rng)
{
Output r;
boost::range::copy(rng, std::inserter(r, boost::begin(r)));
return r;
}
Это довольно удобно:
return collect<std::vector<int>>(ints | filtered(even) | transformed(add1));
Это похоже на то, что действительно должно существовать уже, но я не мог найти это. (Не говоря уже о том, что было бы неплохо как-то «вывести» тип возвращаемого значения, что, скорее всего, было бы в стандартной реализации.)
Кто-нибудь знает о функции, которая ведет себя так?
Задача ещё не решена.
Других решений пока нет …