Сообщение Re: boost::adaptors для временного объекта от 15.10.2016 18:52
Изменено 15.10.2016 18:54 push
Здравствуйте, df, Вы писали:
df>Привет всем.
df>Хотелось бы примерно следующего:
df>
df>С этим диапазоном сделать мы ничего не сможем, т.к. адаптер будет применяться к временному объекту (коряво, но идея, думаю, понятна). А как бы все-таки обмануть? Без того, чтобы предварительно сохранять результат GetData()?
не очень понятна идея, но есть такие варианты:
1) переопределить оператор присваивания — но тогда забыть про auto
2) добавить через вертикальную строку преобразователь в нужный формат (типа как в LINQ для проекции)
3) использовать подобие расширяющих методов в с++: (вот тут p-strade/oven что-то япошки пилили, но сложно сказать в каком оно сейчас состоянии)
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 что-то япошки пилили, но сложно сказать в каком оно сейчас состоянии)
Re: boost::adaptors для временного объекта
Здравствуйте, df, Вы писали:
df>Привет всем.
df>Хотелось бы примерно следующего:
df>
df>С этим диапазоном сделать мы ничего не сможем, т.к. адаптер будет применяться к временному объекту (коряво, но идея, думаю, понятна). А как бы все-таки обмануть? Без того, чтобы предварительно сохранять результат GetData()?
не очень понятна идея, но есть такие варианты:
1) переопределить оператор присваивания — но тогда забыть про auto
2) добавить через вертикальную строку преобразователь в нужный формат (типа как в LINQ для проекции)
3) использовать подобие расширяющих методов в с++: расширяющие методы (вот тут p-strade/oven что-то япошки пилили, но сложно сказать в каком оно сейчас состоянии)
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 что-то япошки пилили, но сложно сказать в каком оно сейчас состоянии)