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

oven::pack

C++

packは、複数の範囲からiterator rangeのタプルを生成する関数です。

#include <iostream>
#include <vector>
#include <string>
#include <boost/assert.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_comparison.hpp>
#include <pstade/oven/initial_values.hpp>
#include <pstade/oven/pack.hpp>

using namespace pstade::oven;

int main()
{
    std::vector<int> rng0 = initial_values(1, 2, 3);
    std::string      rng1 = "abc";

    BOOST_ASSERT(pack(rng0, rng1) ==
                 boost::make_tuple(make_iter_range(rng0), make_iter_range(rng1)));
}

主に、zippedと組み合わせて使用するようです。

#include <iostream>
#include <vector>
#include <string>
#include <boost/foreach.hpp>
#include <boost/tuple/tuple.hpp>
#include <pstade/oven/initial_values.hpp>
#include <pstade/oven/identities.hpp>
#include <pstade/oven/zipped.hpp>
#include <pstade/oven/pack.hpp>
#include <pstade/oven/io.hpp>

using namespace pstade::oven;

#define foreach BOOST_FOREACH

int main()
{
    std::vector<int> rng0 = initial_values(1, 2, 3);
    std::string      rng1 = "abc";

    typedef boost::tuple<int&, char&> value_type;
    foreach (value_type t, pack(rng0, rng1)|zipped) {
        boost::get<0>(t) = 99;
        boost::get<1>(t) = 'z';
    }

    std::cout << (rng0|identities) << std::endl;
    std::cout << (rng1|identities) << std::endl;
}
{99,99,99}
{z,z,z}


【参照】
pstade::oven::pack