Я начал играть с Boost:: Range, чтобы иметь конвейер ленивых преобразований на С++. Моя проблема заключается в том, как разделить конвейер на более мелкие части. Предположим, что у меня есть:
int main(){
auto map = boost::adaptors::transformed; // shorten the name
auto sink = generate(1) | map([](int x){ return 2*x; })
| map([](int x){ return x+1; })
| map([](int x){ return 3*x; });
for(auto i : sink)
std::cout << i << "\n";
}
И я хочу заменить первые две карты на magic_transform
, i.e.:
int main(){
auto map = boost::adaptors::transformed; // shorten the name
auto sink = generate(1) | magic_transform()
| map([](int x){ return 3*x; });
for(auto i : sink)
std::cout << i << "\n";
}
Как написать magic_transform
? Я посмотрел Boost:: Range documentation, но я не могу понять его.
Добавление. Я хочу написать класс следующим образом:
class magic_transform {
... run_pipeline(... input) {
return input | map([](int x){ return 2*x; })
| map([](int x){ return x+1; });
};