|
Boost Users : |
Subject: [Boost-users] [Phoenix] : Using phoenix with zip_iterator
From: Manjunath Kudlur (keveman_at_[hidden])
Date: 2010-03-15 23:17:03
I have the following program where I make_zip_iterator on 2
vector<int>::iterator's and am trying to pass a Phoenix expression to
std::for_each on the iterator. I wrote a lazy version of tuple.get<N>
for that purpose. I get a compile error because the phoenix functor
only accepts references, whereas the tuple element seems to get passed
by value. What am I doing wrong?
Manjunath
#include <iostream>
#include <vector>
#include <algorithm>
#include <boost/iterator/zip_iterator.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_statement.hpp>
#include <boost/spirit/include/phoenix_scope.hpp>
#include <boost/spirit/home/phoenix/function/function.hpp>
using namespace boost::phoenix;
using namespace boost::phoenix::arg_names;
using namespace boost::phoenix::local_names;
using namespace std;
namespace fusion = boost::fusion;
struct print_tuple {
void operator()(const boost::tuple<int&, int&>& t) const {
cout << t.get<0>() << " " << t.get<1>() << "\n";
}
};
struct get0_ {
template<typename Arg>
struct result {
typedef int type;
};
template<typename Arg>
int operator()(Arg a1) const {
return a1.get<0>();
}
};
function<get0_> get0;
int main()
{
vector<int> a(10), b(10);
for(unsigned i=0, e=a.size(); i!=e; ++i) {
a[i] = i;
b[i] = i;
}
std::for_each(a.begin(), a.end(), cout << arg1);
std::for_each(boost::make_zip_iterator(boost::make_tuple(a.begin(),
b.begin())),
boost::make_zip_iterator(boost::make_tuple(a.end(),
b.end())), cout << get0(arg1));
}
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net