Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > C++ Moderated > Re: pass all co...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 3 of 16 Topic 9592 of 9823
Post > Topic >>

Re: pass all container elements to member function (for_each and mem_fun_ref)

by =?ISO-8859-1?Q?Daniel_Kr=FCgler?= <daniel.kruegler@[EMAIL PROTECTED] May 13, 2008 at 10:56 AM

On 12 Mai, 17:28, Nikola <popiz...@[EMAIL PROTECTED]
> wrote:
> class Simple
> {
>
> };
>
> class Holder
> {
>
>      vector<Simple> vec;
>
>      void Do(const Simple& s) const
>      {
>          // does something with s
>      }
>
>      void DoAll()
>      {
>          for_each(vec.begin(), vec.end(), mem_fun_ref(&Holder::Do));
>      }
>
> };
>
> Here is what I get: term does not evaluate to a function taking 1
> arguments

Problem is, that the used overload of mem_fun_ref is
a *binary* functor, it expects as it's first argument
a reference (therefore the name) to the class to which
the pointer to member function belongs (i.e. to Holder)
and it expects as the second argument the parameter
that shall be provided as member function argument (i.e.
a const Simple&). In contrast to this, std::for_each
expects a function(-like object) to which only one
argument is provided (In this case: Each Simple object
of the container). To fix this signature mismatch, you
can use another functor adaptor, std::bind1st, which
does the job you need:

   for_each(vec.begin(), vec.end(),
     bind1st(mem_fun_ref(&Holder::Do), *this));

Now the actual functor provided to for_each expects
only one argument (const Simple&) and ensures that
*this is bound to the first argument of mem_fun_ref,
which solves your problem.

HTH & Greetings from Bremen,

Daniel Krügler


-- 
      [ See http://www.gotw.ca/resources/clcm.htm
for info about ]
      [ comp.lang.c++.moderated.    First time posters: Do this! ]
 




 16 Posts in Topic:
pass all container elements to member function (for_each and m
Nikola <popizdeh@[EMAI  2008-05-12 09:28:02 
Re: pass all container elements to member function (for_each an
Francis Glassborow <fr  2008-05-13 10:57:34 
Re: pass all container elements to member function (for_each an
=?ISO-8859-1?Q?Daniel_Kr=  2008-05-13 10:56:39 
Re: pass all container elements to member function (for_each an
Marcin Swiderski <sfid  2008-05-13 10:55:57 
Re: pass all container elements to member function (for_each
Oncaphillis <oncaphill  2008-05-13 10:53:40 
Re: pass all container elements to member function (for_each an
"Jeff Baker" &l  2008-05-13 11:57:27 
Re: pass all container elements to member function (for_each and
Chris Uzdavinis <cuzda  2008-05-13 11:57:28 
Re: pass all container elements to member function (for_each an
d04rp@[EMAIL PROTECTED]   2008-05-13 11:57:28 
Re: pass all container elements to member function (for_each
Oncaphillis <oncaphill  2008-05-13 21:09:43 
Re: pass all container elements to member function (for_each an
=?ISO-8859-1?Q?Daniel_Kr=  2008-05-13 21:07:38 
Re: pass all container elements to member function (for_each
Carl Barron <cbarron41  2008-05-14 08:57:27 
Re: pass all container elements to member function (for_each and
Ulysses4ever@[EMAIL PROTE  2008-05-14 15:12:52 
Re: pass all container elements to member function (for_each and
Krzysztof Czainski <1c  2008-05-14 15:12:02 
Re: pass all container elements to member function (for_each an
Sashi Asokarajan <sash  2008-05-14 17:53:08 
Re: pass all container elements to member function (for_each and
Mateusz Adamczyk <mate  2008-05-14 17:53:27 
Re: pass all container elements to member function (for_each and
Mathias Gaunard <loufo  2008-05-14 17:52:58 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Thu Jul 24 1:32:50 CDT 2008.