C++ で遅延変換のパイプラインを作成するために、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";
}
そして、最初の 2 つのマップを に置き換えたい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; });
};