Pythonのifilterを作ります。叙述関数を適用してtrueになる要素だけ出します。
以下は、3の倍数だけ出力するコードです。
template<typename T, typename U> class cFilter : public cIterable<T> { U pred; shared_ptr<cIterable<T>> gen; public: cFilter(U p, shared_ptr<cIterable<T>> g) : pred(p), gen(g) { } bool exists_next() { while(gen->exists_next()) { if(pred(gen->value())) return true; } return false; } T value() const { return gen->value(); } }; template<typename T, typename U> shared_ptr<cIterable<T>> filter(U pred, shared_ptr<cIterable<T>> gen) { return shared_ptr<cIterable<T>>(new cFilter<T,U>(pred, gen)); } int main() { auto g = filter([] (int n) { return n % 3 == 0; }, range(10)); cout << g << endl; }