Re[5]: boost::adaptors для временного объекта
От: andyp  
Дата: 18.10.16 08:05
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:


EP>Необязательно. Можно сделать обёртку, которая переместит вектор и адаптеры во внутрь себя, и при этом сама будет являться range, схематично:

  code
EP>
EP>template< ..., typename LazyRange>
EP>class wrapper
EP>{
EP>    vector<...> inner_vector;
EP>    LazyRange lazy_range;
EP>public:
EP>    ...
EP>    auto begin() const ...;
EP>    auto end() const ...;
EP>};
EP>

Вектор будет жить столько, сколько будет жить обёртка — её можно даже вернуть вверх по стэку.

EP>Если совсем не оптимально, то можно ещё вот так проиллюстрировать:

  code
EP>
EP>auto shared_data = make_shared<vector<int>>( GetData() );
EP>auto doubled = *shared_data | boost::adaptors::transformed([shared_data](auto i){ return i * 2; });
EP>

doubled можно вернуть вверх по стэку.

Все так, но судя по всему (тут вангую) ТС именно этого и хотел избежать. Можно ж было просто

const std::vector<int>& data = GetData();

//тут строим нужный пайплайн из вьюшек


сделать. Вот жизнь исходного вектора и продлена.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.