
Fredrik wrote:
John Torjo wrote:
Hi all,
I think since member functions can be wrapped up as >functors, why not same for member data? Therefore, I think this could be a useful addition to >functional:
<<snip>>
What do you think?
I think Peter Dimov has already thought about this ;) Read the current mem_fn docs carefully and you'll find a data-case also. I agree it's very useful functionality. It was added fairly "silently" though (mid 2002 IIRC) which might have made people miss it(?).
Indeed! Quite cool! What I miss is the fact that I want mem_fn to treat the object non-const, and have one more function (lets call it const_mem_fn) which would treat the object as non-const. At this time, mem_fn treats the object as const: // mem_fn.hpp, line 256 typedef R const & result_type; typedef T const * argument_type; If we were to have what I said above, we could simply modify any sequence inplace. Combining it with bind, and the possibilities are limit-less. Imagine this: struct test { int i; std::string s; }; std::vector<test> tests; // ... fill void set(int & i, int val) { i = val }; int val = 10; // for each obj from vector, set obj.i = val; std::for_each( tests.begin(), tests.end(), bind(&decrement, bind(mem_fn(&test::i),_1), val); Changes to mem_fn are fairly easy. I could do them, if Peter is ok with it. (basically, I still think it would be simpler to have one more mem_data class to clearly diffenenciate from mem_fn, which always suggests a member function) Best, John