On 3/30/06, Nico Galoppo
Well, I probably over-simplified the problem. What I would really like to do is manipulate data members of all instances in a container, where the data member is given as an input parameter.
struct A { int value; int othervalue; }
container<A> array;
void f(container<A> & array, membervarref) { BOOST_FOREACH(container<A>::value_type& element, array) bind(membervarref, element) = 3; }
f(array, &A::value); f(array, &A::othervalue);
--nico
Well, how about this (using you definition of A):
typedef std::vector<A> As;
typedef int A::*Setter;
void Set(As& as, Setter setter, int value)
{
using namespace boost::lambda;
std::for_each(as.begin(), as.end(), bind(setter, _1) = value);
}
void func()
{
As as;
Set(as, &A::a, 3);
Set(as, &A::b, 5);
}
If you want to decouple from A a bit more, you could change the
definition of Setter like below
typedef boost::function