I think that your advice is a good choice. Using a function object is more clearly.
However, if some one know how to do this using Lambda or Bind, please tell me. I want to know it. thanks!

2009/3/23 Christopher Currie <christopher@currie.com>
On Sun, Mar 22, 2009 at 8:52 PM, Ç®ÏþÃ÷ <kyleqian@gmail.com> wrote:
> I am sorry that I did not figure out the whole intention. Beside calling
> member function, I hope to delete the object immediately.
> I wrote the code at first time:
>
> std::for_each( items.rbegin(), items.rend(),
> (_1->*&DiscardableItem::Discard, bind(delete_ptr(), _1)) );
>
> after for_each, objects deleted, but Discard function did not been called.
> If using Bind can do the same thing, please tell me. thanks!
> 2009/3/23 Alex MDC <alex.mdc@gmail.com>

At this point, though you probably *can* do what you want with bind,
you may want to consider if it will be easier (and clearer in intent)
to simple write a function object that implements your desired
behavior:

struct Discarder : std::unary_function<DiscardableItem*,void>
{
 void operator()( DiscardableItem * pd ) const
 {
   pd->Discard();
   delete pd;
 }
};

std::for_each( items.rbegin(), items.rend(), Discarder() );

HTH,
Christopher
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users