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