On Tue, 02 Feb 2016 15:59:06 +0000, Atila Neves wrote: > struct String1 { string s; } > struct String2 { string s; }
I've seen this sort of thing before. A blogger I used to follow, Jeremy Miller, implemented an event broker using this pattern. I don't like it. It requires a new type for each event, and you have to defensively use that pattern even if you only have one event at the moment. Every time I implemented an event system, I've gone with named events and no special type for their parameters. With std.signals, you could do this: struct Event(TArgs...) { mixin Signal!TArgs; } class Foo { Event!string usernameEntered; Event!string passwordEntered; Event!(long, string) someOtherEventHappened; void enterPassword(string s) { passwordEntered.emit(s); } void enterUsername(string s) { usernameEntered.emit(s); } } void main() { auto o = new Observer; auto f = new Foo; f.usernameEntered.connect(&o.watch); f.passwordEntered.connect(&o.watch); f.enterUsername("adelhurst"); f.enterPassword("********"); }