oven::regular
Boost.LambdaのファンクタはDefaultConstructibleでもAssignableでもないので
そのファンクタを保持するイテレータはInputIteratorにすらなれません。
regularを使うことで、そのようなファンクタをイテレータで使える形式に変換することができます。
#include <iostream> #include <vector> #include <boost/lambda/lambda.hpp> #include <pstade/oven/initial_values.hpp> #include <pstade/oven/regular.hpp> #include <pstade/oven/filtered.hpp> #include <pstade/oven/io.hpp> using namespace boost::lambda; using namespace pstade::oven; int main() { std::vector<int> v = initial_values(1, 2, 3, 4, 5); std::cout << (v|filtered(_1 % 2 == 0)) << std::endl; // これは不正 std::cout << (v|filtered(regular(_1 % 2 == 0))) << std::endl; // {2,4} : OK }
C++0xのラムダ式も、デフォルトコンストラクタとコピー代入演算子を持たない(deleteされる)ので
同じ問題があります。
【参照】
p_stade; - lambda functorはassignableじゃない