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
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to