On 2013-05-19 19:41, deadalnix wrote:

I have bunch of code that goes like :

auto oldVar = var;
scope(exit) var = oldVar;

This is begging for a RAII solution where I pass var as template
parameter but would require default constructor. This is an actual
problem I have right now as all save/restore are harder and harder to
keep in sync for no reason and generate a lot of boilerplate.

This is a problem I have right now that default constructor would solve,
and this isn't the first time I hit that need.

You can do something like this:

void restore (alias value, alias dg) ()
{
    auto tmp = value;

    scope (exit)
        value = tmp;

    dg();
}

int a;

void foo () { a = 4 };

void main ()
{
    a = 3;
    restore!(a, {
        foo();
    });
}

The syntax isn't that pretty but it should work. I wish D had better syntax for this, something like:

restore(a) {
    foo();
}

--
/Jacob Carlborg

Reply via email to