|
Boost : |
Subject: Re: [boost] [function] function wrapping with no exception safetyguarantee
From: Emil Dotchevski (emil_at_[hidden])
Date: 2010-10-08 11:12:27
On Thu, Oct 7, 2010 at 7:56 PM, OvermindDL1 <overminddl1_at_[hidden]> wrote:
> 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...
Like Peter said, this need not be the case.
Emil Dotchevski
Reverge Studios, Inc.
http://www.revergestudios.com/reblog/index.php?n=ReCode
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk