http://d.puremagic.com/issues/show_bug.cgi?id=8441
--- Comment #7 from jfanati...@gmx.at 2013-01-18 10:39:34 PST --- Ha! Sorry :-) I completely forgot about the example of Ellery Newcomer (And I wondered already how you made up such an elaborate solution, from such a simple problem ;-) ). The code I am concerned with is: https://github.com/eskimor/phobos/blob/new_signal/std/signals.d The template mixin code in particular: mixin template Signal(Args...) { private final void emit( Args args ) { full.emit(args); } final void connect(string method, ClassType)(ClassType obj) if(is(ClassType == class) && __traits(compiles, {void delegate(Args) dg=mixin("&obj."~method);})) { full.connect!method(obj); } final void connect(ClassType)(ClassType obj, void delegate(ClassType obj, Args) dg) if(is(ClassType == class)) { full.connect(obj, dg); } final void strongConnect(void delegate(Args) dg) { full.strongConnect(dg); } final void disconnect(string method, ClassType)(ClassType obj) if(is(ClassType == class) && __traits(compiles, {void delegate(Args) dg=mixin("&obj."~method);})) { full.disconnect!method(obj); } final void disconnect(ClassType)(ClassType obj, void delegate(ClassType, T1) dg) if(is(ClassType == class)) { full.disconnect(obj, dg); } final void disconnect(ClassType)(ClassType obj) if(is(ClassType == class)) { full.disconnect(obj); } final void strongDisconnect(void delegate(Args) dg) { full.strongDisconnect(dg); } final ref RestrictedSignal!(Args) restricted() @property { return full.restricted; } private FullSignal!(Args) full; } Use case: class Button { mixin Signal!() clicked; void click() { clicked.emit(); } } import std.stdio; void main() { Button b=new Button; b.clicked.strongConnect(() {writeln("I was clicked!");}); b.click(); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------