我开始使用 Boost::Range 以便在 C++ 中拥有一个惰性转换管道。我现在的问题是如何将管道分成更小的部分。假设我有:
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";
}
我想用 a 替换前两张地图magic_transform
,即:
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 的文档,但我无法很好地掌握它。
附录:我正在寻找这样的类:
class magic_transform {
... run_pipeline(... input) {
return input | map([](int x){ return 2*x; })
| map([](int x){ return x+1; });
};