Re: for_each problem
In article <49df8801$1@news.cadence.com>, bowan2004@gmail.com says...
class A {
void test(int k);
};
class Test {
A* d_a;
vector<int> d_array;
void test() {
typedef vector<int>::iterator VI;
for (VI i=d_array.begin(); i != d_array.end(); ++i)
{
d_a ->test(*i);
}
}
};
Question:
How can I use for_each to replace this "for" loop in test()?
Minor nit: right now, A::test is private, so Test::test won't compile.
Most people find it all too easy to imitate that particular behavior,
but prefer not to do so. :-)
Less minor nit: right now, you've defined d_a as a pointer to an A, but
you have not initialized it to point at anything -- when you attempt to
dereference it, you get undefined behavior -- another of those things
people find it all too easy to do, but generally attempt to avoid.
for_each(d_array.begin(),
d_array.end(),
mem_fun(A::test)
);
First you have to make the member function public, of course. Then you
have to have an actual obect on which to invoke the member function, not
just a pointer to nowhere of the right type.
Then, if possible, you rename the member function from 'test' to
'operator()' -- that makes invoking it really easy, and at least as
you've posted it, with A having only one member function, you might as
well use that name:
std::for_each(d_array.begin(), d_array.end(), A());
I'll let somebody else deal with the ugliness that arises when you
insist on giving the member function a different name -- quite a while
ago, I decided that was a great deal of ugliness and work with
essentially no benefit. If you decide you want to do it anyway, there
are some additions to <functional> in TR1 and the upcoming revision to
the C++ standard that make it a bit easier than what's in C++ 03.
--
Later,
Jerry.
The universe is a figment of its own imagination.