oven::outdirected

oven::indirectedがポインタの配列を、間接参照した範囲に変換するものであるのに対し、
oven::outdirectedは値の配列をポインタ(もしくはイテレータ)の範囲に変換します。

#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
#include <pstade/oven/initial_values.hpp>
#include <pstade/oven/outdirected.hpp>

#define foreach BOOST_FOREACH

using namespace pstade::oven;

int main()
{
    std::vector<int> v = initial_values(3, 1, 4);

    foreach (std::vector<int>::const_iterator it, v|outdirected)
    {
        std::cout << *it << std::endl;
    }
}
3
1
4

outdirectedしたものをindirectedすれば元に戻ります。

#include <iostream>
#include <vector>
#include <pstade/oven/initial_values.hpp>
#include <pstade/oven/outdirected.hpp>
#include <pstade/oven/indirected.hpp>
#include <pstade/oven/io.hpp>

using namespace pstade::oven;

int main()
{
    std::vector<int> v = initial_values(3, 1, 4);
    std::cout << (v|outdirected|indirected) << std::endl; // {3,1,4}
}

【参照】

pstade::oven::outdirected

pstade::oven::indirected

vector<shared_ptr<T>>に対するfor_each