|
Boost : |
From: Alexander Nasonov (alnsn-boost_at_[hidden])
Date: 2005-11-10 09:37:47
Is there an interest to write something like this
int i = 2, j = 1;
BOOST_FINALLY_BEGIN( (i)(j) )
{
std::cerr << i + j << '\n';
} BOOST_FINALLY_END
in a code to make sure that a code inside finally block
is always executed when leaving a scope?
Code is here: http://files.rsdn.ru/21403/finally.cpp
Note that it depends on typeof.
Preprocessed output is below:
// Not thread-safe yet
void* _finally_last_params = 0;
int main()
{
int i = 2, j = 1;
typedef typeof(i) _finally_typeof_46i;
typedef typeof(j) _finally_typeof_46j;
struct _finally_params_46
{
_finally_typeof_46i & i ;
_finally_typeof_46j & j ;
} _finally_params_46 = { i, j };
_finally_last_params = &_finally_params_46;
struct _finally_guard_46
{
void* _finally_params;
~_finally_guard_46()
{
typedef struct _finally_params_46 params;
params* p= static_cast<params*>(_finally_params);
_finally_body(p -> i , p -> j , 0);
}
static void _finally_body( _finally_typeof_46i & i
, _finally_typeof_46j & j
, int)
{
// USER CODE HERE
std::cerr << i + j << '\n';
}
} _finally_guard_48 = { _finally_last_params };
}
-- Alexander
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk