|
Boost : |
Subject: Re: [boost] [function] function wrapping with no exception safetyguarantee
From: OvermindDL1 (overminddl1_at_[hidden])
Date: 2010-10-07 22:56:41
On Thu, Oct 7, 2010 at 8:37 PM, Emil Dotchevski <emil_at_[hidden]> wrote:
> On Thu, Oct 7, 2010 at 6:22 PM, Peter Dimov <pdimov_at_[hidden]> wrote:
>> Daniel Walker wrote:
>>
>>> void do_stuff(boost::function<int(int)> f)
>>> {
>>> // ...
>>> if(f) {
>>> // Remove the exception safety guarantee for this block.
>>> boost::unsafe_function<int(int)> g = f;
>>> for(int i = 0; i < INT_MAX; ++i)
>>> g(i);
>>> }
>>> // ...
>>> }
>>
>> This example implies that unsafe_function is inherently more efficient, but
>> this need not be so. An empty function may point to throw_bad_function_call
>> instead of NULL.
>
> Right, and what the empty boost::function does needs not be decided at
> compile time, it can be done in the constructor.
However the empty built-in Boost.Function still does an if(isnull)
test on every operator call, whether you assigned something in the
constructor or not...
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk