[Issue 8441] mixin containing template functions causes compiler errors
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Jan 18 10:39:35 PST 2013
http://d.puremagic.com/issues/show_bug.cgi?id=8441
--- Comment #7 from jfanatiker at 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: -------
More information about the Digitalmars-d-bugs
mailing list