|
Boost Users : |
Subject: Re: [Boost-users] [fusion] "modify" value in map
From: Jean-Louis Leroy (jl_at_[hidden])
Date: 2009-09-27 03:12:22
Jean-Louis Leroy wrote:
> How can I create a map that has the same content as another rmap, except
> for a given key which has a new associated value ? I'm looking for
> something like replace_key<Key>(Sequence, Value) in the doc but I cannot
> find it. I think I can build it with push_back(erase_key<Key>(seq),
> make_pair<Key>(newval)) but if it already exists...
I'm encountering difficulties while trying to implement this. Consider :
template<class K>
struct replace_at_key {
template<typename Any> bool operator()(Any) const { return false; }
template<class V> bool operator()(boost::fusion::pair<K, V>) const
{ return true; }
};
void test() {
using namespace boost::fusion;
typedef map<
pair<int, std::string>
, pair<double, std::string> >
map_type;
map_type m(
make_pair<int>("X")
, make_pair<double>("Men"));
BOOST_AUTO(v, boost::fusion::as_vector(
replace_if(m, replace_at_key<int>(),
make_pair<int, std::string>("Z"))));
as_map(v); // error : reference to reference
}
I get compiler errors (msvc9 and g++ 4.4.1) because it's trying to form
a reference to a reference. Indeed, when I look inside v with the
debugger I see that the type of v.vec.m1 is
`const pair<double, string>&' (note : reference). And m1 is passed by
reference in the internals of fusion. Hence the error.
Am I doing something wrong here ?
Thanks,
J-L
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