Информация об изменениях

Сообщение Re: boost::adaptors для временного объекта от 15.10.2016 18:52

Изменено 15.10.2016 18:54 push

Здравствуйте, df, Вы писали:

df>Привет всем.


df>Хотелось бы примерно следующего:

df>

df>vector<int> GetData()
df>{
df>  return { 1,2,3,4,5,6,7,8,9 }; 
df>}

df>auto doubled = GetData() | boost::adaptors::transformed([](auto& i) {return i * 2; });

df>


df>С этим диапазоном сделать мы ничего не сможем, т.к. адаптер будет применяться к временному объекту (коряво, но идея, думаю, понятна). А как бы все-таки обмануть? Без того, чтобы предварительно сохранять результат GetData()?


не очень понятна идея, но есть такие варианты:
1) переопределить оператор присваивания — но тогда забыть про auto
2) добавить через вертикальную строку преобразователь в нужный формат (типа как в LINQ для проекции)
3) использовать подобие расширяющих методов в с++: (вот тут p-strade/oven что-то япошки пилили, но сложно сказать в каком оно сейчас состоянии)