読者です 読者をやめる 読者になる 読者になる

oven::regular

C++

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される)ので
同じ問題があります。



【参照】

pstade::oven::regular

p_stade; - lambda functorはassignableじゃない