Ah, I totally missed that. But what if `s' went out of the scope and the scope ended? Wouldn't the scope reference (the one containing `b') be lost and cause memory corruption?<div><br></div><div>E.g.:</div><div>
<br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font class="Apple-style-span" face="'courier new', monospace">Switch make_switch()</font></div><div>
<font class="Apple-style-span" face="'courier new', monospace">{</font></div><div><font class="Apple-style-span" face="'courier new', monospace">    auto s = new Switch();</font></div><div><font class="Apple-style-span" face="'courier new', monospace">    auto b = new ToggleButton();</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><span class="Apple-style-span" style="font-size: 13px; border-collapse: collapse; "><font class="Apple-style-span" face="'courier new', monospace">    s.watch = (Switch.State state) { b.toggled = cast(bool)(</font></span><span class="Apple-style-span" style="font-family: 'courier new', monospace; font-size: 13px; border-collapse: collapse; ">state</span><span class="Apple-style-span" style="font-family: 'courier new', monospace; font-size: 13px; border-collapse: collapse; ">); };</span></blockquote>
<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><span class="Apple-style-span" style="font-size: 13px; border-collapse: collapse; "><font class="Apple-style-span" face="'courier new', monospace"><br>
</font></span><div><font class="Apple-style-span" face="'courier new', monospace">    return s;</font></div><div><font class="Apple-style-span" face="'courier new', monospace">}</font></div></blockquote><div>
<div><br></div><div>-- <br>Atenciosamente / Sincerely,<br>Guilherme ("n2liquid") Vieira<br><div><br><div class="gmail_quote">On Wed, Jan 12, 2011 at 10:57 AM, Dmitry Olshansky <span dir="ltr"><<a href="mailto:dmitry.olsh@gmail.com">dmitry.olsh@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div></div><div class="h5">On 12.01.2011 15:41, Guilherme Vieira wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
I'm wondering if a delegate adapter template like isn't handy for Phobos (it may be especially useful for std.signal):<br>
<br>
    class Switch<br>
    {<br>
        enum State { ON, OFF }<br>
<br>
        void trigger()<br>
        {<br>
            switch (mState)<br>
            {<br>
                case State.ON: mState = State..OFF; break;<br>
                case State.OFF: mState = State.ON; break;<br>
                default: break;<br>
            }<br>
<br>
            if (watch !is null) watch(mState);<br>
        }<br>
<br>
        void delegate(State s) watch;<br>
<br>
        private State mState;<br>
    }<br>
<br>
    class ToggleButton<br>
    {<br>
        @property toggled(bool toggled)<br>
        {<br>
            writeln("ToggleButton.toggled(", toggled, ")");<br>
        }<br>
    }<br>
<br>
    void main()<br>
    {<br>
        scope s = new Switch();<br>
        scope b = new ToggleButton();<br>
<br>
        s.watch = &b.toggled; // error: invalid conversion<br>
        s.watch = adapt!("obj.toggled = cast(bool)(a)", Switch.State)(b);<br>
<br>
        s.trigger(); // prints `ToggleButton.toggled(true)`<br>
        s.trigger(); // prints `ToggleButton.toggled(false)`<br>
        s.trigger(); // prints `ToggleButton.toggled(true)`<br>
        s.trigger(); // prints `ToggleButton.toggled(false)`<br>
    }<br>
<br>
<br>
Yes, it urges to be polished. Particularly, it doesn't support multiple arguments. I also wanted to place the argument type tuple somwhere else (actually wanted to hide it completely, but I think that's not possible).<br>

<br>
Feedback?<br>
<br>
-- <br>
Atenciosamente / Sincerely,<br>
Guilherme ("n2liquid") Vieira<br>
</blockquote></div></div>
How is it better then built-in language feature? This works just fine:<br>
    void main()<br>
    {<br>
//they can't be scope  and compiler enforces this (+ scope is deprecated)<br>
//actually, the orignal code is unsafe - what hapens if adapted delegate escapes current scope?<br>
        auto s = new Switch();<br>
        auto b = new ToggleButton();<br>
<br>
<br>
        s.watch = (Switch.State a){ b.toggled = cast(bool)a; };<div class="im"><br>
        s.trigger(); // prints `ToggleButton.toggled(true)`<br>
        s.trigger(); // prints `ToggleButton.toggled(false)`<br>
        s.trigger(); // prints `ToggleButton.toggled(true)`<br>
        s.trigger(); // prints `ToggleButton.toggled(false)`<br>
    }<br>
<br></div>
-- <br><font color="#888888">
Dmitry Olshansky<br><br></font></blockquote></div>
</div></div></div>