|
Boost : |
From: Dave Abrahams (abrahams_at_[hidden])
Date: 2000-02-03 07:41:17
on 2/3/00 5:28 AM, Aleksey Gurtovoy at alexy_at_[hidden] wrote:
> I have in mind a small (pretty??) class, which seems to me to be a yet
> another candidate to our boost utility library. I've seen it to be
> reinvented at least 2 times after I'd invented it myself , so I will be not
> much surprised if someone say 'I have this one too'..
> And even if you didn't, but you had ever written a code which assign some
> temporary value to a variable at some place in a block (usually at the
> beginning), and restore the old value at the end of it, I am sure you would
> appreciate this class :). It does exactly such thing - assign a new value to
> a variable, storing the old one within itself, and restore the original
> value in its destructor.
I once designed a more flexible variation on this called set_on_exit, which
would assign a value into a reference upon destruction. This lets you
restore the original value thusly:
boost::set_on_exit<bool> on_exit(flag, flag);
flag = false;
But also lets you do things like this:
boost::set_on_exit<bool> on_exit(flag, true);
which sets flag to true regardless of its current state when the scope is
exited. That's useful for things like semaphores (detecting synchronous
re-entry to a section of code).
Also, even the name temporary_value is not great, IMO, because objects of
this class do not act as temporary values of their parameter type.
-Dave
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk