|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2002-01-30 15:08:30
From: "Yitzhak Sapir" <ysapir_at_[hidden]>
> Now, regarding the BOOST_BIND_NO_PLACEHOLDERS macro, at first I thought
> it was a mechanism for solving the precompiled headers. In this view,
> you use BOOST_BIND_NO_PLACEHOLDERS in a precompiled header, and then
> include boost/bind/placeholders.hpp in the cpp.
Yes.
> Peter apparently has a different issue, being that some people may not
> like _1 .. _9, and for those people they can use boost::arg<1> etc.
And yes.
> Given this, I'm unsure what their status is - Staying but controversial,
> May be removed if outvoted eventually, Scheduled to be removed in later
> versions or what.
Here to stay.
There are two other reasons for the separate headers:
* making the placeholder types 'public' i.e. at boost:: enables visit_each()
users to recognize them;
* separating the placeholders makes it possible for other libraries to reuse
them.
> I have no problem with _1 .. _9 as names. They are concise, although up
> until now the void-returns problem got me to use bind1st/bind2nd and
> functional (which I had modified to be able to use void returns), so I
> never needed them for anything truly concise. There was also a problem
> in that they couldn't have functors as a first parameter (at least not
> in my experience, which, if I couldn't make it work with just a few
> changes, I tried to work around it as quickly as possible, and in this
> case, went to bind1st/bind2nd).
Sorry, what was the problem again? ;-)
> Also, I think it was a Scott Meyers' article that discussed not being
> able to use standard algorithms in functions like ptr_fun because they
> may include additional default parameters, which ptr_fun may not be
> aware of (I hope I'm getting this right). It is hard for me by looking
> at the code to make certain (compounded by the fact I can't find the
> article right now) so would boost::bind be able to be a workaround for
> such a problem?
Unfortunately not. Once a function converts to a function pointer, there is
no way to determine the default arguments, if any.
The only way to do it portably is to write a forwarding function. I don't
like it but this is what the standard says.
Some compilers "remember" the default arguments and allow such uses but this
is non-standard (and may be classified as a bug.)
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk