Assign any event kind to a single templatized function ?
ag0aep6g via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Sep 5 07:00:04 PDT 2016
On 09/05/2016 03:44 PM, Basile B. wrote:
> °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
> module runnable;
>
> import std.stdio;
>
> struct Foo
> {
> void delegate(int) event1;
> void delegate(int,int) event2;
> void delegate(int,ref int) event3;
> }
>
> struct Handler
> {
> void handle(A...)(A a){writeln(a);}
> void handleref(A...)(/*auto ref*/ A a){writeln(a);}
> }
>
> void main(string[] args)
> {
> import std.traits;
> Foo foo;
> Handler handler;
> foo.event1 = &handler.handle!(Parameters!(foo.event1));
> foo.event2 = &handler.handle!(Parameters!(foo.event2));
> foo.event3 = &handler.handleref!(Parameters!(foo.event2)); // ?
> }
> °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
You can pass the delegate type itself by alias. Then Parameters carries
over the ref. Not sure if that's well-defined or if it just happens to work.
void handlef(F)(Parameters!F a){writeln(a);}
...
foo.event3 = &handler.handlef!(typeof(foo.event3));
More information about the Digitalmars-d-learn
mailing list