|
Boost : |
From: Douglas Gregor (gregod_at_[hidden])
Date: 2002-11-09 10:01:28
On Saturday 09 November 2002 04:10 am, Aleksey Gurtovoy wrote:
> A crazy thought - how about enabling something like this:
[snip code]
> In other words, can we allow a zero-arity 'function<...>' to treat ordinary
> values as first-class function objects?
Do we want to? I think not, because boost::function will lose its ability to
safely replace function pointers. At present, boost::function function
objects either support the same syntax and (nearly) the same semantics as
function pointers, or the syntax will fail to compile on boost::function. I'm
worried about this case:
typedef bool (*when_to_stop_callback)();
bool stop_if_user_intervention();
// ...
expensive_action.when_to_stop = &stop_if_user_intervention;
expensive_action.do_it();
expensive_action.when_to_stop = 0;
If when_to_stop_callback is changed to a have type function<bool()>, we have a
problem: the code still compiles, but now the final line (assignment to zero)
has different semantics: it assigns a function object that always returns
false.
#include your friendly local lambda header and you can do this:
boost::function<int ()> f1 = constant(-1);
Aside from that, I'm not sure it's implementable. We would need a way to tell
if an arbitrary class type is a function object or not. If we can do this,
we will have solved the is_callable problem and Boost.Function will become
very useful indeed :)
Doug
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk