
On 3/30/06, Nico Galoppo <nico@crossbar.net> wrote: <snip>
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<int&(A&)> Setter; and it'll compile and run OK (tested with VC7.1). Stuart Dootson